)我有两个应用程序。在应用程序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"/>
答案 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?