Android使用ContentProvider报异常(java.lang.SecurityException: Permission Denial: opening provider)
16lz
2021-01-23
android使用ContentProvider直接报错,查看错误信息提示:
java.lang.SecurityException: Permission Denial: opening provider
首先确认的是代码没有问题,这就百思不得其解了,几经周折,终于找到原因。
原因:
在manifest里provider节点的exported属性没有设置,应该将熟悉设置为true
exporeted介绍
android:exported 是Android中的四大组件 Activity,Service,Provider,Receiver 四大组件中都会有的一个属性。
作用:是否支持其它应用调用当前组件。默认值:如果包含有intent-filter 默认值为true; 没有intent-filter默认值为false
如在provider中:
(1)当前内容提供者是否会被其它应用使用: true: 当前提供者可以被其它应用使用。任何应用可以使用Provider通过URI 来获得它,也可以通过相应的权限来使用Provider。
(2)false:当前提供者不能被其它应用使用。设置Android:exported=“false”来限制其它应用获得你应用的Provider。只有拥有同样的user ID 的应用可以获得当前应用的Provider。
(3)当Android sdk 的最小版本为16或者更低时他的默认值是true。如果是17和以上的版本默认值是false。
(4)可以通过Android:exported=“fasle” 和 permission来限制当前应用Provider是否会被其它应用获取。
更多相关文章
- Android 原生系统给电信发短信出现乱码或者收不到的原因
- Android学习——基础组件
- Android adb命令启动系统组件
- android调用系统邮件组件(intent匹配的流程)
- 可循环显示图像的Android Gallery组件
- Android下基于OpenGL的程序会发生纹理丢失的原因