Android Gallery intent.getData()在onActivityResult中返回null

Android Gallery intent.getData()在onActivityResult中返回null,android,android-intent,android-gallery,onactivityresult,Android,Android Intent,Android Gallery,Onactivityresult,我最近修复了我的应用程序中出现在某些设备上的错误;当用户从我的应用程序启动的intent中拍照时,在onActivityResultUri=intent.getData()中返回null。我设法在中解决了这个问题,但是当用户需要从手机的照片库中选择图片时,我遇到了完全相同的问题。相同的intent.getData()==null 开始意图: Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*

我最近修复了我的应用程序中出现在某些设备上的错误;当用户从我的应用程序启动的intent中拍照时,在
onActivityResult
Uri=intent.getData()中返回null。我设法在中解决了这个问题,但是当用户需要从手机的照片库中选择图片时,我遇到了完全相同的问题。相同的
intent.getData()==null

开始意图:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(Intent.createChooser(intent, "Select Picture"),     
R.id.SELECT_IMAGE_ACTIVITY_REQUEST_CODE);
onActivityResult:

Uri selectedImage = data.getData();
String[] filePathColumn =
    {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
dataHasChanged(ACTION_PICTURE, filePath);
PS:奇怪的是,如果我像下面所示启动intent,我可以获得
intent.getData()
,但前提是我在三星s4上使用“Gallery”应用程序,而不是谷歌照片应用程序

Intent pickImageIntent = new Intent(
    Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
if (pickImageIntent.resolveActivity(getPackageManager()) != null)
    startActivityForResult(pickImageIntent, R.id.SELECT_IMAGE_ACTIVITY_REQUEST_CODE);

我不确定如何进行。我发现整个安卓系统的意图有时非常混乱。

我给你一些代码供你参考:

从应用程序中单击pic后使用以下代码:

    Intent intent = new Intent();
    // call android default gallery
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    try {
        intent.putExtra("return-data", true);
        startActivityForResult(Intent.createChooser(intent,"Complete action using"), PICK_FROM_GALLERY);
    } catch (ActivityNotFoundException e) {
        // Do nothing for now
    }
下面的代码将出现在您的
onActivityResult()中。


希望这能解决您的问题。

如果只有一个ImageView可将img设置为。。。如果我想使用相同的逻辑为多个ImageView加载文件,该怎么办?onActivityResult上的代码如何知道将照片设置到哪个ImageView?有什么建议吗?至少解释一下你的代码,以便更好地理解。设计这段代码时,我会得到我选择的不同图像。
static final int REQUEST_GALLERY_IMAGE = 14;

----------
 Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
        photoPickerIntent.setType("image/*");
        startActivityForResult(photoPickerIntent, REQUEST_GALLERY_IMAGE );


 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      if (requestCode == REQUEST_GALLERY_IMAGE && resultCode == RESULT_OK) {
            try {
                final Uri imageUri = data.getData();
                InputStream imageStream = getContentResolver().openInputStream(imageUri);
                final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
                imagePreview.setImageBitmap(selectedImage);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
 }
static final int REQUEST_GALLERY_IMAGE = 14;

----------
 Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
        photoPickerIntent.setType("image/*");
        startActivityForResult(photoPickerIntent, REQUEST_GALLERY_IMAGE );


 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      if (requestCode == REQUEST_GALLERY_IMAGE && resultCode == RESULT_OK) {
            try {
                final Uri imageUri = data.getData();
                InputStream imageStream = getContentResolver().openInputStream(imageUri);
                final Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
                imagePreview.setImageBitmap(selectedImage);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
 }