定制广播接收者许可

时间:2016-02-06 12:35:21

标签: android

我有一个Activity,其中在方法内部向位于Activity的片段中的自定义接收器发送广播...我想设置一个权限作为sendBroadcast的第二个参数,所以我的接收器只能接收特定的广播...

活动的sendBroadcast():

@Override
public void update(Observable observable, Object connectionStatus) {
    Log.e(debugTag, connectionStatus+"");
    intent = new Intent("networkStateUpdated");
    intent.putExtra("connectivityStatus", (int) connectionStatus);
    sendBroadcast(intent, "mypermission");
}

在Fragment的onActivityCreated

中初始化自定义Receiver
 broadcastReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {

                connectionStatus = intent.getExtras().getInt("connectivityStatus");

            }
        };

@Override
public void onResume() {
    super.onResume();
    getActivity().registerReceiver(broadcastReceiver, new IntentFilter("networkStateUpdated"), "mypermission", null);

}

@Override
public void onPause() {
    super.onPause();
    getActivity().unregisterReceiver(broadcastReceiver);
}

设置" mypermission"因为sendBroadcast的第二个参数显然不起作用..

1 个答案:

答案 0 :(得分:1)

当您需要在进程之间发送消息时,请使用系统广播(例如,sendBroadcast()上调用的Context)。

在一个过程中,使用系统广播会增加IPC开销和安全问题。相反,使用某种进程内事件总线。就个人而言,我使用greenrobot's EventBusLocalBroadcastManager是Android支持库的一部分。其他人更喜欢Square's Otto或其他事件总线实现。这些在开销方面较便宜,而且它们对您的应用程序来说是私有的,因此没有新的安全问题。