android – onActivityResult在使用Intent.EXTRA_ALLOW_MULTIPLE时获得RESULT_CANCELLED

我在我的活动中有以下按钮,它打开图库以选择单个或多个图像,在此之下,OnActivityResult函数,即为多个图像返回RESULT_CANCELLED结果,为单个图像返回RESULT_OK.不知道为什么会这样.有人可以请帮助.

buttonGallery.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
    intent.setType("image/*");
    startActivityForResult(Intent.createChooser(intent,"Select Picture"), choose_picture);
    //startActivity(intent);
    }
});

//OnActivityResult for the above

public void onActivityResult(int requestCode, int resultCode, Intent data) {
      if(requestCode == choose_picture) {
          Uri imageUri = (Uri)data.getParcelableExtra(Intent.EXTRA_STREAM);
      //Do something
}

我将data.getData()视为null,将data.getExtras()视为null.

有人可以指导我如何从上面的代码中获得所需的结果.我想要用户从图库中选择的所有图像的URI.

PS:它对于单个图像工作正常,不知道为什么.

最后我得到了解决方案.使用EXTRA_ALLOW_MULTIPLE时,如果用户正在选择多个内容,而不是在intent.getExtra()中返回,则在ClipData中返回意图中的数据,仅支持SDK版本18及更高版本.从那里,可以使用以下代码检索数据 – >

 if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) 
                                            && (null == data.getData())) 
 {
                ClipData clipdata = data.getClipData();
                for (int i=0; i<clipdata.getItemCount();i++)
                {
                    try {
                        Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), clipdata.getItemAt(i).getUri());
                        //DO something
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
}

我对intent.getData()进行了空检查,因为在单个图像的情况下,数据是在intent.getData()中接收的,而在多个选择的情况下,这被接收为null.

因此,对于低于18的sdk版本和单选(不考虑sdk版本),可以通过以下方式简单地检索数据:

InputStream ist = this.getContentResolver()
                            .openInputStream(data.getData());
Bitmap bitmap = BitmapFactory.decodeStream(ist);
翻译自:https://stackoverflow.com/questions/24433649/onactivityresult-getting-result-cancelled-when-using-intent-extra-allow-multiple

转载注明原文:android – onActivityResult在使用Intent.EXTRA_ALLOW_MULTIPLE时获得RESULT_CANCELLED