Как связаться между Activity и Service, используя LocalBroadcastManager в другом процессе - PullRequest
1 голос
/ 14 мая 2019

У меня есть Сервис, который находится в другом процессе, определенном в Манифесте, и MapboxMap Активность, и я просто хотел узнать, как я могу общаться между моей Сервисом и Активностью, используя LocalBroadcastManager.

Я пытался передать контекст службы на LocalBroadcastManager.getInstance(), а затем зарегистрировать LocalBroadcast в своей активности. Он успешно регистрируется, но не может получить информацию от моего Сервиса!

Вот мой код в моем Службе ...

Intent locationIntent = new Intent("LocationIntent");
        locationIntent.setAction("updatedLocations");
        locationIntent.putExtra("list",updatedList);
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(locationIntent);

... и я регистрирую это в своей активности:

LocalBroadcastManager.getInstance(getApplicationContext()).registerReceive``r(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                Timber.tag("localB").d("registered!");
                if (intent != null && intent.getAction() != null && 
intent.getAction().equals("updatedLocations")) {
                    sawLocationsList = (HashMap<Integer, 
MarkerItem>)intent.getSerializableExtra("list");
                    Timber.tag("sawL").d("updated");
                }
            }
        } , new IntentFilter("LocationIntent"));

Когда я запускаю приложение, моя служба отправляет широковещательную рассылку, но моя активность не получает широковещательное сообщение!

Я думаю, что проблема в том, что мое Служение определено в другом процессе в моем Манифесте, как этот ...

android:name=".services.ForegroundService"
            android:enabled="true"
            android:exported="false"
            android:process=":ForegroundService"

... но я хотел бы общаться таким образом, потому что участие в другом процессе помогает моим целям эффективности использования батареи.

1 Ответ

3 голосов
/ 14 мая 2019

Как установить связь между активностью и службой с помощью LocalBroadcastManager в другом процессе

Это невозможно. «Локальный» в LocalBroadcastManager означает «локальный для этого процесса». LocalBroadcastManager специально не работает между процессами.

Или:

  • И действие, и служба должны быть в одном процессе, или

  • Использование какой-либо формы IPC для связи между процессами (системное вещание, Messenger и т. Д.)

...