Android N以上外部打开自定义URI文件的注意事项

背景:最近在做一个下载模块,要求下载完成后可以点击打开文件。涉及到安卓N中需要FileProvider的地方。但苦于一直没法用第三方应用打开下载的文件(比如用WPS打开xlsx这样子),但APK的安装没啥问题,上网苦苦搜索了一番找到了解决方案,特地码住。

参考文章:https://mp.weixin.qq.com/s/0BFFoyJdrzkfk6k66tHtyA?

网上大多数的解决方案都差不多,仅仅介绍了使用FileProvider的方法以及对文件mimeType的判断,但是都没有涉及到给第三方应用授权的问题。

而第三方应用没有获得相应的权限就无法打开这个文件。

代码实现:

int flag = Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
List<ResolveInfo> resolveInfoList = MyApplication.getContext().getPackageManager()
                .queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo info : resolveInfoList) {
    MyApplication.getContext().grantUriPermission(info.activityInfo.packageName,
                    uri, flag);
}

之后再使用该Intent启动activity即可。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,003评论 25 709
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 13,081评论 2 59
  • 最近病房里住了两位小伙子,一位10号床一位12号床,中间隔着11床的大叔,相仿的年纪,不一样的境遇。 10...
    丝薇阅读 102评论 0 0
  • 在1840年的法国巴黎,一个普通的小杂货铺家庭出生了一个孩子。这个孩子凭借着他与生俱来的任性,带给了世界绘画史无比...
    卿亦人阅读 4,037评论 16 31
  • 以日历插件为例,学会Ubersicht开发 日历制作 内容 显示日历的插件,对源代码稍作修改,更加美观。 流程 [...
    FreakWill阅读 1,012评论 2 1