自定义内容提供程序和权限拒绝例外

时间:2017-03-06 10:48:10

标签: java android android-contentprovider

)我有两个应用程序。在应用程序A中,我有一个数据库,可以从应用程序B访问。我创建了自己的ContentProvider,为应用程序B提供了向应用程序A写入数据的权限。但是,当我安装应用程序B然后应用程序A - 我得到此异常 - java.lang.SecurityException:Permission Denial:打开提供程序。但是,当我安装应用程序A,然后B - 一切都没问题,应用程序可以通过提供商进行通信。我想知道这是一个正常的Android行为还是会出错?感谢

修改

这是我的应用程序A清单

中的一块
<permission android:name="com.myapp.READ_DATABASE" android:protectionLevel="normal" />
<permission android:name="com.myapp.WRITE_DATABASE" android:protectionLevel="normal" />

<provider android:authorities="....."
            android:name="......"
            android:exported="true"
            android:readPermission="com.myapp.READ_DATABASE"
            android:writePermission="com.myapp.WRITE_DATABASE">
        </provider>

这是我的应用B清单中的一部分

<uses-permission android:name="com.myapp.READ_DATABASE"/>
<uses-permission android:name="com.myapp.WRITE_DATABASE"/>

2 个答案:

答案 0 :(得分:1)

您的问题是应用安装的顺序。您应首先安装App A,提供内容提供商和权限的App A,然后安装App B,即访问内容提供商的App B.

答案 1 :(得分:0)

好的,我找到了答案,但是它有缺点。您需要将权限属性添加到清单中的两个应用程序中。

<permission android:name="com.example.permission.READ" 
android:protectionLevel="normal"/>

缺点是两个应用程序都必须使用相同的签名证书才能运行,否则Android不允许您安装两个应用程序。

还请注意,使用该应用的用户应使用签名的保护级别

<permission android:name="com.example.permission.READ" 
android:protectionLevel="signature"/>

在此处查看答案Order of installing the application is changing the behaviour?