Получение данных о деятельности из службы - PullRequest
0 голосов
/ 21 мая 2018

Я смотрю на многие решения других вопросов со схожими проблемами, но не могу понять, что не так с моим кодом.Я понимаю, что LocalBroadcast является популярным способом сделать это, и я потратил время, пытаясь реализовать его.На данный момент получатель не объявлен в моем манифесте, но, насколько я понимаю, это то, для чего нужны строки register.

В моей деятельности:

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("MyActivity", "onReceive");
        String action = intent.getAction();
        int current = intent.getIntExtra("test", 0);
        Toast.makeText(MyActivity.this, current.toString(), Toast.LENGTH_LONG).show();
    }
};

@Override
public void onResume() {
    super.onResume();
    Log.d("MyActivity", "onResume()");
    LocalBroadcastManager.getInstance(MyActivity.this).registerReceiver(
            mMessageReceiver, new IntentFilter("currentUpdate"));
}
@Override
protected void onPause() {
    Log.d("MyActivity", "onPause()");
    LocalBroadcastManager.getInstance(MyActivity.this).unregisterReceiver(mMessageReceiver);
    super.onPause();
}

ВСлужба У меня есть метод, определенный:

private void sendNewBroadcast(Intent intent, int current){
    intent.putExtra("test", current);
    LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
    Log.d("MyService", "new Broadcast sent from service");
}

, и я использую его, как это в другом месте службы:

Intent intent = new Intent("currentUpdate");
sendNewBroadcast(intent, 5);

Я отладил, и все, кажется, работает, за исключением 'получая частьЯ что-то пропустил?Служба запущена в другом действии и продолжается.

1 Ответ

0 голосов
/ 21 мая 2018

Во-первых, действие String в трансляции Intent должно соответствовать действию, установленному на IntentFilter, с которым вы регистрируете приемника.Первоначально они были разными, но, возможно, это была просто опечатка.

Во-вторых, LocalBroadcastManager не работает между процессами.Activity и Service должны выполняться в одном и том же процессе, чтобы можно было использовать LocalBroadcastManager.Если Service должен быть в отдельном процессе, вам придется использовать какой-то другой механизм;например, Intent s, широковещательные сообщения, отправленные и полученные на Context, некоторая реализация шины событий, которая поддерживает IPC, и т. д.

...