Android使用FileProvider分享文件触发SecurityException权限拒绝问题求助
问题排查及解决方案
问题1:手动调用grantUriPermission参数错误
你当前写的requireContext().getApplicationContext().grantUriPermission("package.name", fileURI, ...)第一个参数是你自身应用的包名,该方法的作用是给第三方目标应用授予Uri访问权限,给自身应用授权完全无效,属于冗余错误代码,直接删除该行即可。
分享场景下你已经给Intent添加了FLAG_GRANT_READ_URI_PERMISSION,系统会自动给所有匹配到的分享目标应用授予对应读权限,不需要手动调用授权方法。
问题2:权限配置冗余不合理
分享文件仅需要授予读权限即可,不需要授予写权限,建议去掉Intent.FLAG_GRANT_WRITE_URI_PERMISSION,避免不必要的权限风险:
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
问题3:Authority硬编码可能存在匹配错误
你调用FileProvider.getUriForFile时硬编码了"package.name" + ".provider",如果你的应用存在多渠道/多构建类型配置(比如debug包加了应用ID后缀),会导致和manifest中配置的${applicationId}.provider不匹配,建议改为动态获取应用ID:
Uri fileURI = FileProvider.getUriForFile(requireContext(), BuildConfig.APPLICATION_ID + ".provider", exportFile);
可选适配优化
部分系统版本下需要给选择器也添加权限标志,修改启动代码为:
Intent chooser = Intent.createChooser(shareIntent, "Share via"); chooser.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); startActivity(chooser);
内容的提问来源于stack exchange,提问作者Dimon
相关产品推荐
相关产品推荐

