Android 使用自定义权限读取内容提供程序时获取权限拒绝

Android 使用自定义权限读取内容提供程序时获取权限拒绝,android,android-contentprovider,Android,Android Contentprovider,我有两个不同的应用程序。应用程序A定义了自定义权限和需要该自定义权限的内容提供商。应用程序B使用该权限并尝试访问应用程序A的内容提供商。但是,我收到以下错误: java.lang.SecurityException: Permission Denial: reading com.casimirlab.simpleDeadlines.provider.DeadlineProvider uri content://com.casimirlab.simpleDeadlines.provider/dea

我有两个不同的应用程序。应用程序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()
应用程序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" />
我正在为这两个应用程序使用以下版本

compileSdkVersion 23
buildToolsVersion '25.0.0'

minSdkVersion 10
targetSdkVersion 23
我也知道应用程序安装的顺序。我先安装应用程序A,然后安装应用程序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>

...

您可以考虑声明保护级别为“危险的”,要求用户确认允许它(以及在新版本的Android上需要新的权限处理)。

compileSdkVersion 23
buildToolsVersion '25.0.0'

minSdkVersion 10
targetSdkVersion 23
<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>