如何正确定义ContentProvider权限的问题

        最近写个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的应用。不然就会出现权限问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值