拒绝的权限通过意图
问题描述:
我试图从我的应用程序的缓存目录的短信应用程序发送一个位图文件提供。我正在使用文件提供程序向处理意图的应用程序授予临时权限。当我尝试发送意图,并从意向选择器中选择默认的Android短信应用时,我的消息应用崩溃,并且出现此错误。我试图从选择的意图选择器如电子邮件和其他信息应用其他应用程序,它似乎做工精细,仅使用默认的短信应用程序崩溃。拒绝的权限通过意图
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()
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"));
}
}
我相当肯定我设置的文件提供正确的代码,但这里是在情况下,它需要的清单。
编辑:我只是做了一些测试,似乎与短信应用程序的崩溃发生在早期的apis手机上,但正在开发新的apis,如7.1。文本消息应用程序或者您应该授予读取权限更改的方式吗?
答
试试这个:
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);
}
+0
想这一点,似乎并没有工作。 –
请张贴在一个正常的方式:文字。没有图像,请。 – greenapps
我一直在做一些测试,似乎这个错误可能从使用与旧邮件系统com.android.mms导致此权限错误文件提供的事实是未来的,因为运行的新邮件系统版本的Android com.android.messaging似乎工作正常。 –