Android のセキュリティ モデルを考慮して、ブロードキャスト レシーバーでカスタム アクセス許可を使用しようとしています。
私がやったこと:
受信機のカスタム許可を宣言したため、受信できるブロードキャストが制限されています。マニフェストからのいくつかのコード:
<permission android:name="abc"/>
<receiver android:name=".UpdateUserReceiver"
android:permission="abc"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.ACTION_UPDATE_USERNAME"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>
ここで、レシーバーUpdateUserReceiverは、アクセス許可「abc」を使用するコンポーネントからのブロードキャストのみを受信することを期待しています。
ブロードキャスト送信コード:
// Update username. Invoke broadcast.
Intent updateUserBroadcast = new Intent();
updateUserBroadcast.putExtra("username", userName);
updateUserBroadcast.setAction("android.intent.action.ACTION_UPDATE_USERNAME");
sendBroadcast(updateUserBroadcast);
ブロードキャストを送信するアクティビティ:
<activity android:name=".UpdateUserNameActivity">
<intent-filter>
<action android:name="com.intent.action.UPDATE_USERNAME"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
質問 1 : ご覧のとおり、アクティビティは、アクティビティからのブロードキャストを受信できるように、受信者が宣言したパーミッションをどこにも使用しません。しかし、それでもレシーバーが呼び出されます。よくわかりませんが、暗黙のインテントの使用が原因であると思われます。何か案は?
質問 2 : アプリ レベルで宣言されたパーミッション タグと、レシーバー内の android:permission タグの違いは何ですか? 受信者がブロードキャストを受信することを誰もが期待できるようになる前に許可を強制する2番目の使用を理解していますが、なぜ最初のものが必要なのですか。このシナリオに必要ですか、それとも削除できますか。いずれにせよ、受信機がブロードキャストを受信することを確認しました。