选择不在Redmi Note 4上的图库中的图像

时间:2017-12-26 11:24:44

标签: android redmi-device xiaomi

我已经看到了与此相关的其他几个S / O问题,但是与我的问题最接近的问题似乎没有得到很多回复(Xiaomi MI device not picking image from Gallery)。希望这个问题有更好的运气。

我正在尝试从手机图库中选择一张图片,并将图片路径传递到另一个为用户预览的活动。

我在其他两个设备上测试过这个(Moto E和一些名为Coolpad的东西?)它们似乎都运行得很好。

(调试Android源代码似乎不是一个实用的选项。)

在主要活动中,在UI触发器上,我使用以下代码启动图库选择器:

private void dispatchPickPictureIntent() {
        Intent pickPictureIntent = new Intent(Intent.ACTION_PICK);
        pickPictureIntent.setType("image/*");
        startActivityForResult(pickPictureIntent, REQUEST_IMAGE_PICK);
    }

我像这样处理结果:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_PICK && resultCode == RESULT_OK) {
        Uri selectedImage = data.getData();
        mCurrentPhotoPath = getRealPathFromURI(this, selectedImage);
        launchUploadActivity();
    }
}

private String getRealPathFromURI(Context context, Uri uri) {
    Cursor cursor = null;
    try {
        String [] proj = {MediaStore.Images.Media.DATA};
        cursor = context.getContentResolver().query(uri, proj, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    } finally {
        if (cursor != null)
            cursor.close();
    }
}

一旦我将文件路径存储在全局变量mCurrentPhotoPath中,就会调用以下方法:

private void launchUploadActivity() {
    Intent intent = new Intent(HomeActivity.this, UploadActivity.class);
    intent.putExtra(getString(R.string.photo_path), mCurrentPhotoPath);
    startActivityForResult(intent, REQUEST_IMAGE_UPLOAD);
}

即使在Redmi,直到这里,事情也顺利进行。在UploadActivity的onCreate方法中,我成功收到了图像文件路径字符串。

但是,然后,我尝试预览图像:

private void previewPhoto() {
    imageView.setVisibility(View.VISIBLE);
    BitmapFactory.Options options = new BitmapFactory.Options();

    // Avoid OutOfMemory Exception
    options.inSampleSize = 8;

    // This line returns a null, only on the Xiaomi device
    final Bitmap bitmap = BitmapFactory.decodeFile(photopath, options);

    imageView.setImageBitmap(bitmap);
}

现在我已经尝试调试这个问题,但是一旦我进入BitmapFactory的源代码,我就会遇到一个看似未解决的Android Studio(https://stackoverflow.com/a/40566459/3438497)问题,这使得它无用。

关于如何从这里开始的任何指示将不胜感激。

3 个答案:

答案 0 :(得分:1)

所以我能够将问题缩小到不正确的文件路径。 Uri到filepath函数没有在所有设备上获得所需的结果。

我使用了此处建议的方法:https://stackoverflow.com/a/7265235/3438497

并稍微调整一下代码,以便在从图库中选择图像时,直接使用图像的Uri。

答案 1 :(得分:0)

我在Redmi 5A面临着类似的问题。并使用以下方式解决问题。

在清单文件中添加以下实体

android:hardwareAccelerated="false"

android:largeHeap="true"

它可以在某些环境中使用。

请参阅https://stackoverflow.com/a/32245018/2706551

上的回答

答案 2 :(得分:0)

原因是您返回file:// uri。不是content://,因此内容解析器不起作用。