1

ウィジェットのブロードキャストを受信するためのカスタム アクセス許可を作成しましたが、Motorola デバイスのアクセス許可が拒否されました。

パーミッションの作成

<permission
    android:name="com.sample.app.WIDGET_PERMISSION"
    android:description="@string/widgetDesc"
    android:label="@string/widgetLabel"
    android:protectionLevel="signature" >
</permission>

マニフェスト ファイルへのアクセス許可の追加

    <uses-permission android:name="com.sample.app.WIDGET_PERMISSION" />

レシーバーの追加

    <receiver android:name=".MyWidget" android:label="MyApp"
                android:icon="@drawable/image" 
                android:permission="com.sample.app.WIDGET_PERMISSION">
                <intent-filter>
                    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                     <category android:name="com.sample.app" />
                </intent-filter>
</receiver>

Motorola デバイスに対してのみ許可拒否メッセージが表示されます。

07-17 11:48:18.781: W/ActivityManager(479): Permission Denial: broadcasting Intent { act=android.appwidget.action.APPWIDGET_ENABLED cmp=com.sample.app/.MyWidget} from android (pid=3116, uid=10006) requires com.sample.app.WIDGET_PERMISSION due to receiver com.sample.app/com.sample.app.MyWidget

07-17 11:48:18.781: W/ActivityManager(479): Permission Denial: broadcasting Intent { act=android.appwidget.action.APPWIDGET_UPDATE cmp=com.sample.app/.MyWidget(has extras) } from android (pid=3116, uid=10006) requires com.sample.app.WIDGET_PERMISSION due to receiver com.sample.app/com.sample.app.MyWidget

07-17 11:48:18.828: W/ActivityManager(479): Permission Denial: broadcasting Intent { act=com.motorola.blur.home.ACTION_SET_WIDGET_SIZE cmp=com.sample.app/.MyWidget(has extras) } from com.motorola.blur.home (pid=3116, uid=10006) requires com.sample.app.WIDGET_PERMISSION due to receiver com.sample.app/com.sample.app.MyWidget
4

1 に答える 1

1

android:permission="com.sample.app.WIDGET_PERMISSION"受信者タグから削除してみて<uses-permission android:name="com.sample.app.WIDGET_PERMISSION" />、マニフェスト タグの下に、アプリケーションやアクティビティの外側にのみ含めてください。

編集:問題は、ブロードキャスターがブロードキャストと共に許可を送信して、BroadcastReceiver を通過する必要があることです。コマンドラインを使用してテストしていると、どういうわけか、許可が送信されません。

レシーバー内で許可を宣言することについてあなたがしていることは正しいと思いますが、問題は許可保護レベルが署名されているためです。このレベルは、Android 開発者ページで次のように説明されています。

要求元のアプリケーションが、アクセス許可を宣言したアプリケーションと同じ証明書で署名されている場合にのみ、システムが許可するアクセス許可。証明書が一致する場合、システムは、ユーザーに通知したり、ユーザーの明示的な承認を求めたりすることなく、アクセス許可を自動的に付与します。

これは、モトローラのデバイスでは、これが何とか満たされていないのではないかと思います。変更してみる

android:protectionLevel="signature"

android:protectionLevel="normal".

それでもうまくいかない場合は、Motorola の設定にバグがあると思います。

于 2012-07-17T21:44:56.850 に答える