我有两个不同的应用程序。应用A定义了自定义权限和需要定义的自定义权限的内容提供商。应用B使用该权限并尝试访问应用A的内容提供商。但是,我收到以下错误:
java.lang.SecurityException: Permission Denial: reading com.casimirlab.simpleDeadlines.provider.DeadlineProvider uri content://com.casimirlab.simpleDeadlines.provider/deadlines from pid=17350, uid=10070 requires com.casimirlab.simpleDeadlines.READ_DEADLINE_DATABASE, or grantUriPermission()
App A的AndroidManifest.xml:
<Permission
android:name="com.casimirlab.simpleDeadlines.READ_DEADLINE_DATABASE"
android:protectionLevel="normal">
</Permission>
<uses-permission android:name="com.casimirlab.simpleDeadlines.READ_DEADLINE_DATABASE" />
...
<provider
android:name=".provider.DeadlineProvider"
android:authorities="com.casimirlab.simpleDeadlines.provider"
android:readPermission="com.casimirlab.simpleDeadlines.READ_DEADLINE_DATABASE"
android:exported="true"
android:grantUriPermissions="true" />
App B的AndroidManifest.xml:
<uses-permission android:name="com.casimirlab.simpleDeadlines.READ_DEADLINE_DATABASE" />
在App B中查询代码:
Uri uri = Uri.parse("content://com.casimirlab.simpleDeadlines.provider/deadlines");
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(uri, null, null, null, null);
我正在为这两个应用程序使用以下版本。
compileSdkVersion 23
buildToolsVersion '25.0.0'
minSdkVersion 10
targetSdkVersion 23
我也知道应用安装的顺序。我首先安装App A,然后安装App B.
我已经阅读了其他相关问题,但他们的解决方案对我没有帮助。
答案 0 :(得分:1)
重做您的权限声明,XML区分大小写:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.casimirlab.simpleDeadlines">
<permission android:name="com.casimirlab.simpleDeadlines.READ_DEADLINE_DATABASE"
android:protectionLevel="normal" />
...
</manifest>
您可以考虑将保护级别声明为“危险”,要求用户确认允许它(以及需要更新权限处理的Android的较新版本。)