LocalBroadcastReceiver не работает внутри потока

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

Поскольку это выполняется внутри потока, запущенного службой, я передаю контекст потоку. MyConnection — это поток, расширяющий класс.

@Override
public void onCreate() {
    super.onCreate();       
    connection = new MyConnection(getApplicationContext());
}

Итак, внутри потока, когда я получаю сообщение, я делаю это...

Intent i = new Intent();
i.putExtra("from", message.getFrom());
i.putExtra("message", message.getBody());
i.setAction(MyService.MESSAGE_RECEIVED);                
_context.sendBroadcast(i);

_context — это getApplicationContext(), который я передал конструктору потока. У меня есть receiver, зарегистрированный в моем файле манифеста.

Итак, все работает, и мой получатель успешно получает сообщение.

Теперь я хочу изменить это, чтобы использовать LocalBroadcastManager. Итак, что я сделал, так это просто изменил _context.sendBroadcast(i) на

LocalBroadcastManager.getInstance(_context).sendBroadcast(i);

Однако мой BroadcastReceiver не получает ни одной из передач, отправленных таким образом.

Что я делаю не так? Нужно ли регистрировать ресивер другим способом в манифесте для приема местных трансляций? Требуются ли какие-либо другие шаги, чтобы заставить его работать?


person Ranhiru Jude Cooray    schedule 07.06.2013    source источник
comment
можно попробовать так? stackoverflow.com/a/12270926/1218762, я не уверен в этом   -  person Ronak Mehta    schedule 07.06.2013
comment
это работает для меня: stackoverflow.com/a/16832647/1218762   -  person Ronak Mehta    schedule 07.06.2013


Ответы (1)


Вы зарегистрировали свой широковещательный приемник с помощью registerReceiver или в манифесте?

Вместо передачи getApplicationContext() передайте this, потому что Service также расширяет Context.

person Alexander Kulyakhtin    schedule 07.06.2013
comment
Так что не имеет значения, какой контекст я передаю? Я думал, что должен использовать один и тот же контекст как для отправки, так и для получения. Вот почему я использовал getApplicationContext. - person Ranhiru Jude Cooray; 07.06.2013
comment
Нет, это не имеет значения, если вы передаете одно и то же намерение для трансляции. Действительно, одно приложение может отправить широковещательную рассылку, а другое — получить, тогда контексты явно различаются. - person Alexander Kulyakhtin; 07.06.2013