使用自定义权限阅读内容提供者时获得权限拒绝

Getting permission denial while reading content provider using a custom permission

我有两个不同的应用程序。应用程序 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()

AndroidManifest.xml 应用程序 A:

<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" />

AndroidManifest.xml 应用程序 B:

<uses-permission android:name="com.casimirlab.simpleDeadlines.READ_DEADLINE_DATABASE" />

应用程序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。

我已经阅读了其他相关问题,但他们的解决方案对我没有帮助。

修改您的权限声明,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>

您可以考虑声明保护级别 "dangerous",要求用户确认允许它(并且在 Android 的较新版本上需要较新的权限处理。)