android - 如何在 Flutter 中从意图加载图像?
问题描述
我正在使用共享按钮从 android 照片应用程序共享图像。意图句柄函数如下所示:
void handleFileIntent(Intent intent) {
System.out.println("inside intent");
Uri imageUri = intent.getParcelableExtra(Intent.EXTRA_STREAM);
fileName = imageUri.getPath();
转换为字符串的 Uri 返回以下内容:
content://com.google.android.apps.photos.contentprovider/-1/1/content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F33/REQUIRE_ORIGINAL/NONE/257321333
对 Uri 的 getPath() 调用返回以下内容:
/-1/1/content://media/external/images/media/33/REQUIRE_ORIGINAL/NONE/796304333
我正在努力寻找在 Flutter 中打开这些资源的方法。我该怎么做呢?
我了解这些内容 URL 与在 Android 中打开/访问图像所需的权限捆绑在一起。我知道这个上下文不一定会传递给 Flutter。我也明白这是两个不同的问题,但它们与将图像加载到 Flutter 中有关。
解决方案
正如您所说,资源权限与 Intent 捆绑在一起。但是,这对您应该是透明的,因为您应该能够使用(在 MainActivity 中)获取 InputStream:
InputStream inputStream = getContentResolver().openInputStream(imageUri);
由于权限仅在 Intent 的生命周期内有效,您可能应该使用此 InputStream 立即将文件读取到内存或您自己的应用程序拥有的临时文件中(取决于照片的大小)。
一旦 Widget 被渲染,您可以通过 , 请求字节数组或文件名MethodChannel
,并且在 Flutter 中,使用Image.memory
orImage.file
构造函数创建一个 Image Widget。
如果使用临时文件方法,getCacheDir()
请在 Java 中使用来查找缓存文件夹。创建您自己的临时文件名,然后复制该文件。在 Flutter 端,使用package:path_provider - getTemporaryDirectory()
查找相同的目录。只需通过 MethodChannel 传递文件名。
推荐阅读
- graphql - GraphQL (WP) 通过 uri 获取自定义帖子
- angular - Ionic 5:应用程序关闭后如何保存应用程序更改?
- reactjs - ReferenceError:未定义 babelHelpers ./node_modules/react-avatar-editor/dist/index.js/
我得到一个 ReferenceError: babelHelpers is not defined,同时导入 react-avatar-editor, 请帮助!
- python - 如何修复 Python Flask 应用程序中的“方法不允许”错误
- google-authentication - ArgumentException:必须提供“ClientId”选项。(参数'ClientId')
- javascript - 我如何知道元素是网格上的哪个图块?
- c - 如何在C中读取混合数据的文件?
- ruby-on-rails - 如何在 searchkick 中编写布尔查询
- javascript - 试图找到一种用我的数组显示图像的方法
- android - PlatformException(ERROR_INVALID_EMAIL, 电子邮件地址格式错误。, null)