最近写个demo,效果是写一个A应用定义一个Room为数据库的ContentProvider。写一个B应用,可以通过contentResolver去访问。 定义的时候我在A应用定义了读写权限。在B应用怎么申请权限都不能访问contentProvider。如果删掉A应用的读写权限就能访问。学习学全套。我就给出了定义contentProvider权限的步骤。
<provider
android:authorities="com.demo.providerdemo.provider"
android:name="com.demo.provider.provider.MyProvider"
android:readPermission="com.demo.providerdemo.provider.read"
android:writePermission="com.demo.providerdemo.provider.write"
android:exported="true"
android:grantUriPermissions="true"
android:multiprocess="true"
android:enabled="true">
</provider>
2.在manifest 中定义这2个permission
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.demo.provider">
<permission android:name="com.demo.providerdemo.provider.read"
android:protectionLevel="normal"
/>
<permission android:name="com.demo.providerdemo.provider.write"
android:protectionLevel="normal"
/>
...
</manifest>
然后在B应用中定义这2个应用的permission,如果使用android 11 则需要加一个requires,申明要用的provider的android:authorities。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.demo.contentresolver">
<queries>
<provider android:authorities="com.demo.providerdemo.provider"
/>
</queries>
<uses-permission android:name="com.demo.providerdemo.provider.read"/>
<uses-permission android:name="com.demo.providerdemo.provider.write"/>
</manifest>
还有一个注意点:
1.必须先安装contentProvider 的应用再安装 contentResolver的应用。不然就会出现权限问题。
原文地址:https://blog.csdn.net/xiexiaotian11/article/details/127591452
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_17693.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。