从图库中选择图像不适用于 Redmi Note 4

Posted

技术标签:

【中文标题】从图库中选择图像不适用于 Redmi Note 4【英文标题】:Selecting image from gallery not working on Redmi Note 4 【发布时间】:2018-06-07 06:09:29 【问题描述】:

我在 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://***.com/a/40566459/3438497) 问题,这使它毫无用处。

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

【问题讨论】:

最好使用文件提供者Docs 【参考方案1】:

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

我使用了这里建议的方法:https://***.com/a/7265235/3438497

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

【讨论】:

【参考方案2】:

原因是你得到了 file:// uri。 not content:// 所以内容解析器不起作用。

【讨论】:

【参考方案3】:

我在 Redmi 5A 中遇到了类似的问题。并使用以下方法解决问题。

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

android:hardwareAccelerated="false"

android:largeHeap="true"

它可以在某些环境中工作。

请参考https://***.com/a/32245018/2706551的答案

【讨论】:

以上是关于从图库中选择图像不适用于 Redmi Note 4的主要内容,如果未能解决你的问题,请参考以下文章

Android从图库或相机显示选项中选择图像

从相机中选择图像时无法交付结果,但从图库中选择图像时没有问题

从图库中选择图像并保存以备将来使用

无法使用免安装应用访问图库中的图像

在 Android 4.4 中从图库中选择时裁剪

Redmi Note 4 不运行来自 Android Studio 的应用程序