我的应用程序正在使用ACTION_GET_INTENT创建一个Intent,以查找图像mime类型。返回后,我进行了一个漫长而复杂的过程,检查数据 Intent ,从URI的内容解析器获取光标,检查uri.toString()以及处理某些与其他URI不同的URI。例如,“content://com.google.android.gallery3d”将是“content://com.google.android.apps.docs.storage”,依此类推。

这变得很痛苦,尤其是自KitKat出现并引入了更多URI来处理之时。

但是然后我在一些与SAF和KitKat相关的Google Developer页面上看到了这段建议代码。这似乎完美地工作。我在所有已安装的“文件选择器”类应用程序的KitKat,JB和GB设备上进行了测试。它从未失败。

**所以我的问题是...。此代码是否可靠?还有其他需要注意的地方吗?
如果这是首选方法,那么为什么有那么多SO帖子介绍如何从选择图像中处理返回的Intent/URI?

该代码示例位于:
https://developer.android.com/guide/topics/providers/document-provider.html
在“位图”部分下查看。

try {
        final ParcelFileDescriptor parcelFileDescriptor = myContext.getContentResolver().openFileDescriptor(
                imageUri, "r");
        final FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
        final Bitmap bitmap = BitmapFactory.decodeFileDescriptor(fileDescriptor);
        parcelFileDescriptor.close();
        return bitmap;
    } catch (Exception e) {
        Log.e(tag, "Failed to Parse Image Uri", e);
        throw new Exception("failed to parse image uri");
    }

最佳答案

您上面提到的代码是适用于所有设备的完美解决方案。因为我们有一个自动备份文件夹和一些特定的设备uri问题。因此,如果您使用FileDescriptor,它将在所有设备上正常工作。
我也使用了相同的代码,并在2.3.3版本至4.4.2版本的11种设备中进行了测试。
上面代码的优点是:
我们可以从设备库中包括自动备份文件夹中选择任何图像。但是您提到的现有代码不适用于从图库中选择视频(仅适用于自动备份文件夹)。

10-08 05:24