我正在运行Android 8.1.0的设备上工作。我正在尝试从邮件附件中打开图像。一周前,我使用FileProvider缓存了一个图像文件,现在它停止工作了,而无需我触摸代码。我正在尝试将内部应用存储中的图像共享到应用外部的Intent.ACTION_VIEW。照片查看器确实会启动,但是有一个进度圈一直在旋转。有什么建议么?谢谢!
void launchViewer(File f) {
Uri uri = FileProvider.getUriForFile(context, "com.company.secure.provider", f);
Intent intent = new Intent(Intent.ACTION_VIEW);
String mimeType = Attachment.getMimeType(f.getName());
//TODO Test to make sure this works on all devices...
if (mimeType.startsWith("video")) {
mimeType = "video/*";
}
if (mimeType.startsWith("image")) {
mimeType = "image/*";
}
if(mimeType==null || mimeType.length()==0) {
unknownMimeType(f.getName());
return;
}
List<ResolveInfo> resInfoList = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
if(resInfoList==null || resInfoList.size()==0)
{
AlertDialog dialog = new AlertDialog.Builder(context).setTitle("Error")
.setMessage(String.format("Cannot find app to open file type(%s)",mimeType)).show();
return;
}
for (ResolveInfo resolveInfo : resInfoList) {
String packageName = resolveInfo.activityInfo.packageName;
context.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
intent.setDataAndType(uri, mimeType);
context.startActivity(intent);
}
答案 0 :(得分:0)
因此,我只需要在开始活动之前添加以下行。
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
由于某种原因,我运往测试中的APK中没有包含此行的APK可以正常工作...但是如果没有此版本,任何新版本都无法正常工作。我读到,使用ResolveInfo方法仅适用于Lollipop及以下版本,您必须直接向该意图授予权限。 (不确定这是多么真实)。因此,我将两种权限授予方法都保留在那里,以覆盖所有基础。感谢您的所有帮助!