【问题标题】:Display photo from FileProvider with Intent.ACTION_VIEW使用 Intent.ACTION_VIEW 显示来自 FileProvider 的照片
【发布时间】: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


【解决方案1】:

所以我只需要在开始活动之前添加以下行。

intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

由于某种原因,我运送到测试中但没有此行的 APK 可以正常工作...但没有此行,任何新版本都无法正常工作。我读到使用 ResolveInfo 方法仅适用于 Lollipop 及以下版本,您必须直接将权限授予意图。 (不确定这是多么真实)。出于这个原因,我将两种权限授予方法都保留在那里以涵盖所有基础。感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 2016-09-28
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多