自定义权限如何用于限制在单个应用程序中发送和接收广播?

时间:2013-07-19 19:01:18

标签: android permissions

我正在学习“学习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

1 个答案:

答案 0 :(得分:0)

  

接收方部分的代码中没有任何内容告诉仅当发送方具有saleh.yamba.RECEIVE_TIMELINE_NOTIFICATIONSpermission时才会调用BroadcastReceiver。

是的,有。您已将saleh.yamba.RECEIVE_TIMELINE_NOTIFICATIONS传递给registerReceiver()

具体来说,您正在使用the four-parameter version of registerReceiver(),其中第三个参数是“字符串命名广播公司必须保留的权限才能向您发送意图。如果为null,则不需要权限。”