2

コンテンツ プロバイダとテスト アプリケーションの両方がデバッグ キーで署名されています。パーミッションが適用されていない場合、クライアントは通常どおりコンテンツを受け取りますが、コンテンツにパーミッションを適用したいと考えています。したがって、次の行がコンテンツ プロバイダーのマニフェスト ファイルに追加されます。

  <permission android:name="org.example.provider.READ"
    android:permissionGroup="org.example.group.DATA_ACCESS"
    android:label="@string/readonlyaccess"
    android:protectionLevel="signature" />

  <application
    ...
    <provider android:name=".ImageContentProvider"
        android:authorities="org.example.provider"
        android:readPermission="org.example.provider.READ" />

クライアントのマニフェスト ファイルに、次の行が追加されます。

<uses-permission android:name="org.example.provider.READ" />

プロバイダーからデータを取得しようとすると、次のエラーが発生します。

09-13 22:38:20.995: E/AndroidRuntime(13979): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hello/com.example.hello.HelloActivity}: java.lang.SecurityException: Permission Denial: reading org.example.ImageContentProvider uri content://org.example.provider/file from pid=13979, uid=10040 requires org.example.provider.READ

何か不足していますか、それともアプリケーションがデバッグ キーによって署名されているという事実に関連していますか? 問題を解決するには?プロバイダーに追加する提案も見ましたuses-permissionが、これも役に立ちません。注意。これが重要である可能性がある場合、これはエミュレーター内でチェックされます。

デフォルトのデバッグ キーストアで署名すると、関連する質問が SecurityException をスローすることがわかりましたが、実際の解決策にはなりません。

4

1 に答える 1

3

はい、少なくとも最後に試したときは、デバッグ キーストアで動作します。

<permission>両方のアプリに要素があります。<uses-permission>最初に 1 つをインストールしてから1 つをインストールすると<permission>、問題が発生します。アクセス許可は、 が検出される前に定義する必要があります。<uses-permission>これを行う最も簡単な方法は、<permission>を両方に配置することです。

于 2012-09-13T20:23:40.903 に答える