开发记录
ContentProvider 可用于进程间通信,在应用A中自定义的MyContentProvider要想应用B中被调用,实现步骤如下:
- 首先在A中自定义 Provider 继承 ContentProvider,并重写onCreate、getType和增删改查四个方法;
- 然后在A的AndroidManifest.xml中声明自定义的Provider:
<application>
...
<!--声明自定义的provider-->
<provider
android:name="你的Provider"
android:authorities="你的authorities"
android:exported="true"/>
</application>
其中 android:exported="true"
表示允许外界应用访问自己的provider;
此时在应用B中就可以通过URI(例如:content://A中的authorities/table1)访问A中的Provider了。
- 此外,如果想添加访问权限,首先
要在A中在provider声明之前
,在AndroidManifest.xml中发布需要的权限;然后在声明provider时添加android:permission属性
<manifest >
<!--发布自定义权限,用于访问自定义的Provider,其他进程访问需要声明此权限-->
<permission
android:name="权限名称字符串A"
android:protectionLevel="normal" />
<application>
<!--声明自定义的provider-->
<provider
android:name=".provider.MyProvider"
android:authorities="com.xss.provider"
android:exported="true"
android:permission="发布的权限名称字符串A" />
</application>
</manifest>
此时B中若要访问A中的Provider,需要在B中声明访问A需要的权限
<!--访问应用A的provider需要的权限-->
<uses-permission android:name="A中发布的权限名称字符串A" />
- PS:ContentProvider的权限还可以细分为
读权限android:readpermission
和写权限android:writepermission
;读写权限的优先级>android:permission的优先级