Локальная трансляция из Сервиса не получена Активностью

У меня есть 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);