gpt4 book ai didi

android - 通过 Intent 拒绝文件提供者的权限

转载 作者:行者123 更新时间:2023-11-29 01:07:26 24 4
gpt4 key购买 nike

我正在尝试将位图从我的应用程序的缓存目录发送到短信应用程序。我正在使用文件提供程序向处理 Intent 的应用程序授予临时权限。当我尝试发送 Intent 并从 Intent 选择器中选择默认的 Android 短信应用程序时,我的消息应用程序崩溃并收到此错误。我尝试从 intent 选择器中选择其他应用程序,例如电子邮件和其他消息应用程序,它似乎工作正常,只是在使用默认短信应用程序时崩溃。

java.lang.SecurityException: Permission Denial: reading android.support.v4.content.FileProvider uri content://com.example.brandon.emojimms2/shared_images/image.png from pid=9804, uid=10024 requires the provider be exported, or grantUriPermission()

Permission Denial这是我分享 Intent 的代码

private void shareImage()
{
File imagePath = new File(mContext.getCacheDir(), "images");
File newFile = new File(imagePath, "image.png");
Uri contentUri = FileProvider.getUriForFile(mContext, "com.example.brandon.emojimms2", newFile);

if (contentUri != null) {
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // temp permission for receiving app to read this file
shareIntent.setDataAndType(contentUri, mContext.getContentResolver().getType(contentUri));
shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri);
startActivity(Intent.createChooser(shareIntent, "Choose an app"));
}
}

我相当确定我正确设置了文件提供程序,但这里是 list 以备不时之需。 enter image description here

编辑:我刚刚做了一些测试,短信应用程序的崩溃似乎发生在使用早期 API 的手机上,但正在处理新的 API,例如 7.1。短信应用程序或您应该授予 uri 读取权限的方式是否发生了变化?

最佳答案

试试这个:

List<ResolveInfo> resInfoList = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resInfoList) {
String packageName = resolveInfo.activityInfo.packageName;
context.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
}

关于android - 通过 Intent 拒绝文件提供者的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45893294/

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