最近收到用户反馈:app分享文件到微信会提示:获取资源失败,分享到QQ提示:文件不存在。造成这个问题主要有两个原因:
1、file:// 协议不再支持共享,需要用content:// 协议。简单的说就是文件Uri不能直接通过Uri.fromFile(file)获取,而应该通过FileProvider.getUriForFile(context, packageName+".fileprovider", file)获取。关于如何配置FileProvider网上已经一堆文章了,我这边就不再赘述。
2、由于FileProvider的文件是私有域的,因此其他app想要访问该域的话需要我们的App进行授权
主要是两句代码
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_GRANT_READ_URI_PERMISSION);
activity.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
3、如果你使用的Api版本为30即Android11,那么在调用queryIntentActivities获取相关应用的包名时并没有返回相关的包名,别急,这是因为android11又引入了一个包名可见性的概念,详情可以参考一下文章:Android11适配 - 软件包可见性
4、码云Demo