【问题标题】:Using ParcelFileDescriptor from URI for image selection in Android在 Android 中使用来自 URI 的 ParcelFileDescriptor 进行图像选择
【发布时间】:2014-01-13 20:44:31
【问题描述】:

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

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

但是后来我在一些与 SAF 和 KitKat 相关的 Google 开发人员页面上看到了这段建议的代码。这似乎完美无缺。我在所有已安装的“文件选择器”类型的应用程序上测试了 KitKat、JB 和 GB 设备。它从未失败过。

**所以我的问题是....这段代码可靠吗?还有什么要注意的吗? 如果这是首选方法,为什么会有这么多关于如何处理选择图像返回的 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");
    }

【问题讨论】:

    标签: android image android-intent uri


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-13
      • 1970-01-01
      • 2019-11-01
      • 2016-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多