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

时间:2017-07-26 00:34:07

标签: android android-contentprovider

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

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

1 个答案:

答案 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的较新版本。)