gpt4 book ai didi

android - Flutter 分享图像 Intent

转载 作者:IT王子 更新时间:2023-10-29 06:45:53 26 4
gpt4 key购买 nike

我正在尝试通过经典分享图片 Intent .我添加了以下项目:

文件路径.xml:

<?xml version="1.0" encoding="utf-8"?>
<paths>
<files-path name="my_images" path="." />
</paths>

list :

    <provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.android.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>

最后 MainActivity.java:

private void shareFile(String fileName) {
Intent share = new Intent(Intent.ACTION_SEND);
Uri uri = FileProvider.getUriForFile(this, "com.example.android.fileprovider", new File(this.getApplicationInfo().dataDir + "/app_flutter/userphotos", fileName));
share.setData(uri);
share.setType("image/png");
share.putExtra(Intent.EXTRA_STREAM, uri);
share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(share, "Share"));
}

我面临的问题是我尝试分享的图像具有以下路径:

/data/user/0/shoedrobe.innovativeproposals.com.shoedrobe/app_flutter/userphotos/receipt20181101094430.jpg

然而 FileProvider正在尝试从这里访问它:

java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/shoedrobe.innovativeproposals.com.shoedrobe/app_flutter/userphotos/receipt20181101094430.jpg

为了保存图像,我正在使用包 path_provider 并且我将项目保存在 getApplicationDocumentsDirectory() ,在Android中是AppData目录。

我不确定为什么 FileProvider突然决定离开/data/user/0//data/data/文件夹,因此非常感谢有关此事的任何帮助或提示。

更新:
我已经根据建议更新了代码并替换了 UriMainActivity.java 下使用以下行:

Uri uri = FileProvider.getUriForFile(this, "com.example.android.fileprovider", new File(this.getDir("flutter", Context.MODE_PRIVATE).getPath() + "/app_flutter/userphotos", path));

尽管如此,问题仍然存在(同样的异常文件应该在 /data/data/<package> 而不是 /data/user/0 下。我还尝试向我的 AndroidManifest 添加额外的权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

但效果不佳。问题可能出在我的 file_paths.xml 文件上吗?

最佳答案

最后,所有提议的解决方案都没有奏效;既不使用extenal-path,也不使用其他解决方案。

我最终共享文件的方式是首先将它实际复制到一个临时(缓存)目录(在 flutter path_provider 中是 getTemporaryDirectory())并将 file_paths.xml 更新为以下内容:

<cache-path name="image" path="."/>

最后在 MainActivity.java 下:

Uri uri = FileProvider.getUriForFile(this, "com.example.android.fileprovider", new File(this.getCacheDir(), path));

关于android - Flutter 分享图像 Intent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53099751/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com