2016-02-06 2 views
0

У меня есть функция, в которой внутри метода отправляется широковещательная передача в пользовательский приемник, расположенный во Фрагменте активности ... Я хотел бы установить разрешение в качестве второго параметра sendBroadcast, чтобы мой получатель мог получать только конкретные вещает ...пользовательские разрешения приемника вещания

sendBroadcast Activity (в):

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

инициализации пользовательского приемника внутри фрагмента onActivityCreated

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

Я * настоятельно рекомендую вам перейти от этого к «LocalBroadcastManager» или к какой-либо другой форме встроенной шины событий (например, Square's Otto, EventBus greenrobot). Не используйте межпроцессное общение как средство для разговора с одной частью вашего приложения в другую часть вашего приложения. Мало того, что «LocalBroadcastManager» или шина событий будут быстрее, но у вас не будет этой проблемы безопасности. – CommonsWare

+0

Вы правы. Я прочитал документацию о LocalBroadcastManager и действительно отлично подходит для своих приложений. – tsiro

ответ

1

Использовать системные широковещательные передачи (например, sendBroadcast(), вызванные Context), когда вам нужно отправлять сообщения между процессами.

В рамках процесса с использованием системных широковещательных рассылок добавляются накладные расходы IPC и проблемы с безопасностью. Вместо этого используйте некоторую шину событий в процессе. Лично я использую greenrobot's EventBus. LocalBroadcastManager является частью библиотек поддержки Android. Другие предпочитают Square's Otto или другие реализации шины событий. Они являются менее дорогими с точки зрения накладных расходов, и они являются частными для вашего приложения, поэтому нет новых проблем безопасности.

Смежные вопросы