【问题标题】:How custom permissions are used to restrict sending and receiving the broadcasts within a single app?如何使用自定义权限来限制在单个应用程序中发送和接收广播?
【发布时间】:2013-07-20 03:06:32
【问题描述】:

我正在向“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接收广播的Activity中:

   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. 
      }
   }

这里接收者通过另一个权限接收它。好的,
接收者如何知道saleh.yamba.RECEIVE_TIMELINE_NOTIFICATIONS.
接收者部分的代码中没有任何内容表明只有当接收者拥有saleh.yamba.RECEIVE_TIMELINE_NOTIFICATIONSpermission 时才会调用BroadcastReceiver

【问题讨论】:

    标签: android permissions


    【解决方案1】:

    接收者部分的代码中没有任何内容表明只有在发送者拥有 saleh.yamba.RECEIVE_TIMELINE_NOTIFICATIONSpermission 时才会调用 BroadcastReceiver。

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

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

    【讨论】:

    • 但我传递给了registerReceiver() saleh.yamba.SEND_TIMELINE_NOTIFICATIONS 而不是saleh.yamba.RECEIVE_TIMELINE_NOTIFICATIONS,正如书中所说。是书错了吗?
    • @SalehFeek:啊,好吧,我明白你的意思了。看起来这些权限应该是同步的,我不知道为什么不同步。您可以尝试在支持论坛中询问这本书本身:marakana.com/forums/android/learning_android_book
    猜你喜欢
    • 2017-12-22
    • 2016-03-24
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多