これがシナリオです。私のアプリは
- BroadcastSenderActivity
- SampleBroadcastReceiver
メソッドを使用sendBroadcast(intent, permission)
してブロードキャストを送信しています。SampleBroadcastReceiver のみがブロードキャスト メッセージを受信し、アプリ内の他のレシーバーがメッセージを受信できないようにするためです。
注:すべての受信者は同じアクションに対して登録されますが、システム条件に基づいてブロードキャスト時に、メッセージはさまざまな権限でブロードキャストされます。
ドキュメントから、マニフェストに次のものが必要であることを知りました。
<permission android:name="com.example.MYPERMISSION" android:label="my_permission" android:protectionLevel="normal"></permission>
マニフェストで宣言する必要がありますこの stmt を使用して、アプリ レベルのアクセス許可を要求します。
<uses-permission android:name="com.example.MYPERMISSION"/>
質問-
アプリ レベルのパーミッション リクエストの代わりに、アプリ内の特定のコンポーネントに対してのみパーミッションをリクエストするにはどうすればよいですか? 例えば。SampleBroadcastReceiver (以下のコードを参照)。出来ますか?*
<android-permission>
すべての個々のコンポーネントで使用できるタグの目的は何ですか? それは私の目的を果たすことができますか?Androidマニフェスト
.........
<activity android:name="com.example.activities.BroadcastSenderActivity" android:label="BroadcastSenderActivity" android:theme="@android:style/Theme.Light" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- ************************************** RECEIVER ******************************************* --> <receiver android:name="com.example.broadcastTest.SampleBroadcastReceiver" android:exported="false"> <intent-filter> <action android:name="com.example.ACTION_BROADCAST_SEND" /> </intent-filter> </receiver> <receiver android:name="com.example.broadcastTest.BroadcastReceiver_1" android:exported="false"> <intent-filter> <action android:name="com.example.ACTION_BROADCAST_SEND" /> </intent-filter> </receiver> <receiver android:name="com.example.broadcastTest.BroadcastReceiver_2" android:exported="false"> <intent-filter> <action android:name="com.example.ACTION_BROADCAST_SEND" /> </intent-filter> </receiver>
public class BroadcastSenderActivity extends Activity {
public BroadcastSenderActivity() {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(Logger.TAG, "BroadcastSenderActivity - onCreate");
setContentView(R.layout.broadcast_tester);
Button btn = (Button)findViewById(R.id.sendBroadcastBtn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent broadcastIntent = new Intent();
Log.d(Logger.TAG, "BroadcastSenderActivity - sending the broadcast");
broadcastIntent.setAction(com.example.ACTION_BROADCAST_SEND);
BroadcastSenderActivity.this.sendBroadcast(broadcastIntent, com.example.MYPERMISSION);