2016-05-04 9 views
0

同じ証明書で署名されたアプリケーションによってのみ使用可能なコンテンツプロバイダを作成しようとしています。 私は、署名保護レベルと権限を宣言している。この他のアプリケーションでコンテンツプロバイダにアクセスするセキュリティ例外

<provider 
    android:name=".MyProvider" 
    android:authorities="com.example.provider" 
    android:permission="com.example.permissions.USER_PERMISSION" 
     android:readPermission="com.example.permissions.USER_PERMISSION_READ" 
     android:writePermission="com.example.permissions.USER_PERMISSION_WRITE" 
     android:exported="true"> 
</provider> 

のようなコンテンツプロバイダを宣言しました。

すべて良いが、私はこのような他のアプリケーションからプロバイダにアクセスしようとすると:

//Create an URI that will be used to check the status of the content provider 
    Uri myURI = Uri.parse("content://com.example.provider"); 
    ContentResolver contentResolver = getContentResolver(); 

    try { 
     contentResolver.insert(prototypeURI,null); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

私はSecurityException: Permission Denial: opening provide ... requires com.example.permissions.USER_PERMISSION_READを取得します。

アイデア?

+0

あなたのアンドロイドのメインファイストファイルの読み取りまたは書き込みのアクセス権を受け取ります –

+0

私はそうしました。彼らは両方ともそこにいます – Arkde

+0

6.0または>で動作していますか?実行時パーミッションを尋ねる必要があります。 –

答えて

0

問題が見つかりました。 アプリケーションの1つでは、gradle.buildの署名設定によって異なるデバッグキーが使用されていました。

1

まず、android:permissionまたはの組み合わせをandroid:readPermissionandroid:writePermissionの組み合わせで使用してください。

第2に、これらの権限を定義している<permission>要素を持つアプリを最初にインストールする必要があります。

第3に、他のアプリでは、対応する<uses-permission>の要素が必要な権限のために必要です。

+0

これらのすべてと何も動作していないようでしたか – Arkde

関連する問題