Android M内容提供商权限

时间:2016-06-14 19:35:16

标签: android android-6.0-marshmallow android-permissions

我见过类似的问题,但我认为我遇到了Android M特有的问题。

我有两个Android应用程序。一个扩展ContentProvider来管理SQLiteDatabase。另一个呈现GUI并从/向内容提供者读/写数据。这两个应用程序成功协同工作,直到我尝试在Content Provider上设置权限。

我收到以下错误消息:

  

引起:java.lang.SecurityException:权限拒绝:打开   来自ProcessRecord的提供者com.example.productkit.ProductKit {ce096cd   27369:com.example.myapplication / u0a60}(pid = 27369,uid = 10060)要求   com.example.productkit.permission.CONTENT_PROVIDER或   com.example.productkit.permission.CONTENT_PROVIDER

Content Provider的AndroidManifest.xml文件如下所示:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.productkit">

    <permission android:name="com.example.productkit.permission.CONTENT_PROVIDER"/>    

    <application>
        <provider
            android:name=".ProductKit"
            android:authorities="com.example.productkit"
            android:exported="true"
            android:permission="com.example.productkit.permission.CONTENT_PROVIDER"/>
    </application>
</manifest>

GUI应用程序的AndroidManifest.xml文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <uses-permission android:name="com.example.productkit.permission.CONTENT_PROVIDER"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">

        <activity
            android:name=".MainActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

我的理解是,应用程序需要在运行时使用Android M请求权限。作为实验,我尝试使用以下测试代码执行此操作:

    int hasPermission = checkSelfPermission("com.example.productkit.permission.CONTENT_PROVIDER");
    if (hasPermission != PackageManager.PERMISSION_GRANTED) {
        requestPermissions(new String[] {"com.example.productkit.permission.CONTENT_PROVIDER"},
                REQUEST_CODE_ASK_PERMISSIONS);
    }
    hasPermission = checkSelfPermission("com.example.productkit.permission.CONTENT_PROVIDER");

不幸的是,在调用requestPermissions()之后,hasPermission不等于PERMISSION_GRANTED。

如果我使用相同的代码来访问内置权限(例如CAMERA),则会出现一个对话框,我可以向该应用程序授予权限。我的内容提供商的许可不会发生这种情况。

0 个答案:

没有答案