【发布时间】:2019-01-07 22:23:51
【问题描述】:
我正在使用运行 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);
}
【问题讨论】:
-
你有崩溃堆栈跟踪吗?
-
使用具体的 MIME 类型,而不是通配符。
-
@MatPag 不确定如何在此处添加堆栈以便清晰可见。
-
@CommonsWare 这就是我以前做过的事情,我试图扩大它以查看是否可能缺少权限。
-
用堆栈跟踪的图像编辑了帖子。
标签: java android android-studio android-intent android-fileprovider