赞
踩
最近写个demo,效果是写一个A应用定义一个Room为数据库的ContentProvider。写一个B应用,可以通过contentResolver去访问。 定义的时候我在A应用定义了读写权限。在B应用怎么申请权限都不能访问contentProvider。如果删掉A应用的读写权限就能访问。学习学全套。我就给出了定义contentProvider权限的步骤。
1.在provider中定义permision
- <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的应用。不然就会出现权限问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。