Локальная трансляция из Сервиса не получена Активностью
У меня есть Activity
в котором я регистрирую BroadcastReceiver
локально следующим образом:
public class SomeActivity extends Activity{
public static final String PERFORM_SOME_ACTION = "PERFORM_SOME_ACTION";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.some_activity_layout);
.....
.....
IntentFilter filter = new IntentFilter();
filter.addAction(PERFORM_SOME_ACTION);
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// perform some action ...
}
};
registerReceiver(receiver, filter);
}
.....
.....
}
И у меня есть Service
из которого я транслирую Intent
следующее:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Intent i = new Intent(SomeActivity.PERFORM_SOME_ACTION);
sendBroadcast(i); /* Send global broadcast. */
return START_STICKY;
}
Это работает как задумано. После этого я понял, что локальная трансляция будет более подходящей для этой ситуации:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Intent i = new Intent(SomeActivity.PERFORM_SOME_ACTION);
LocalBroadcastManager.getInstance(this).sendBroadcast(i); /* Send local broadcast. */
return START_STICKY;
}
К сожалению, приведенная выше схема не работает. Глобальная трансляция отправляется каждый раз, в то время как локальная трансляция, очевидно, никогда не отправляется / не принимается.
Что мне здесь не хватает? Не могут быть отправлены локальные трансляции между двумя отдельными компонентами приложения, как два отдельных Activity
с или от Service
для Activity
? Что я делаю неправильно??
Замечания:
Согласно документации, более эффективно и целесообразно отправлять локальную трансляцию (трансляцию внутри приложения, область действия которой ограничена собственными компонентами приложения), а не глобальную трансляцию (трансляция между приложениями, которая передается в каждое приложение на телефоне), когда нам не нужна трансляция для распространения вне приложения. Это причина для внесения вышеупомянутых изменений.
1 ответ
Что мне здесь не хватает?
использование LocalBroadcastManager
для регистрации LocalBroadcast, в настоящее время использую registerReceiver
Метод Activity, который используется для регистрации глобальной трансляции:
LocalBroadcastManager.getInstance(this).registerReceiver(receiver, filter);