0

「Learning Android」 - Oreilly - Marko Gargenta から学んでいます。

私は第11章(ブロードキャストレシーバー)にいます

私は本に従った、そしてすべてがうまくいく。しかし、単一のアプリ内でのブロードキャストの送受信を制限するために、カスタム アクセス許可をどのように使用するかについて質問があります。

本はこのトピックについて明確です。しかし、何かが足りない気がします。

受信者と送信者は、異なるアクセス許可についてどのようにお互いに伝えますか?

ファイルAndroidManifest.xml内:

<permission
    android:name="saleh.yamba.SEND_TIMELINE_NOTIFICATIONS"
    android:description="@string/send_timeline_notifications_permission_description"
    android:label="@string/send_timeline_notifications_permission_label"
    android:permissionGroup="android.permission-group.PERSONAL_INFO"
    android:protectionLevel="normal" />
<permission
    android:name="saleh.yamba.RECEIVE_TIMELINE_NOTIFICATIONS"
    android:description="@string/receive_timeline_notifications_permission_description"
    android:label="@string/receive_timeline_notifications_permission_label"
    android:permissionGroup="android.permission-group.PERSONAL_INFO"
    android:protectionLevel="normal" />

<uses-permission android:name="saleh.yamba.SEND_TIMELINE_NOTIFICATIONS" />
<uses-permission android:name="saleh.yamba.RECEIVE_TIMELINE_NOTIFICATIONS" />

ブロードキャストを送信するサービス:

Intent intent = new Intent("saleh.yamba.NEW_STATUS");
updaterService.sendBroadcast(intent, "saleh.yamba.RECEIVE_TIMELINE_NOTIFICATIONS");

ここで、送信者は許可を得てインテントを送信しますsaleh.yamba.RECEIVE_TIMELINE_NOTIFICATIONS。わかりました。受信者はこの許可についてどのように知ることができますか?

経由でブロードキャストを受信するアクティビティ内BroadcastReceiver:

   TimelineReceiver receiver;
   IntentFilter filter;

protected void onCreate(Bundle savedInstanceState)
{
   receiver = new TimelineReceiver();
   filter = new IntentFilter("saleh.yamba.NEW_STATUS");
}

protected void onResume()
{
   this.registerReceiver(receiver, filter, "saleh.yamba.SEND_TIMELINE_NOTIFICATIONS", null);
}

protected void onPause()
{
   this.unregisterReceiver(receiver);
}

   private class TimelineReceiver extends BroadcastReceiver
   {
      @Override
      public void onReceive(Context context, Intent intent)
      {
         //do something. 
      }
   }

ここで、受信者は別の許可でそれを受け取ります。OK、
受信者は についてどのように知っていますかsaleh.yamba.RECEIVE_TIMELINE_NOTIFICATIONS
レシーバー部分のコードには、レシーバーがパーミッションBroadcastReceiverを持っている場合にのみ が呼び出されることを示すものは何もありません。saleh.yamba.RECEIVE_TIMELINE_NOTIFICATIONS

4

1 に答える 1

0

送信者がsaleh.yamba.RECEIVE_TIMELINE_NOTIFICATIONS権限を持っている場合にのみBroadcastReceiverが呼び出されることを伝える受信者部分のコードには何もありません。

はいあります。にパスしましsaleh.yamba.RECEIVE_TIMELINE_NOTIFICATIONSregisterReceiver()

具体的には、 の 4 パラメータ バージョンをregisterReceiver()使用しています。3 番目のパラメータは、「インテントを送信するためにブロードキャスターが保持しなければならないアクセス許可に名前を付ける文字列です。null の場合、アクセス許可は必要ありません。」

于 2013-07-19T19:06:32.117 に答える