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

标签 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()

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

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

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

最佳答案

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

关于android - 使用自定义权限阅读内容提供者时获得权限拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45315548/

相关文章:

安卓 Intent : Send an email with attachment

android - 彩信和短信的日期列长度不同

android - 通过 Intent with Image (Photo) 插入联系人 (ContactsContract)

java - 无法从适配器调用 Activity 函数

java - 无法解析符号 com.google.firebase.messaging.Message

java - fragment 内的简单列表未填充

Android原生联系人修改

android - 如何在 Android 上测试内容提供者

android - 使用 LoaderManager 和 CursorAdapter 的 CRUD

java - 无法将 UTC 转换为 IST,它仍然只返回 UTC