Постоянная ссылка на BroadcastReceiver - PullRequest
0 голосов
/ 18 декабря 2011

Чего я хочу добиться, так это дать пользователю кнопку «Начать прием трансляции», а другую - «Остановить прием трансляции».

Я регистрирую BroadcastReceiver для «android.provider.Telephony.SMS_RECEIVED»."intent (функция« Начать прием трансляции »):

incomingSmsReceiver = new IncomingSmsReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
getApplicationContext().registerReceiver(incomingSmsReceiver, filter);

Затем я использую unregisterReceiver () для« Прекращения приема трансляции »:

getApplicationContext().unregisterReceiver(incomingSmsReceiver);

Как вы можете видеть, он использует ту же ссылку (private static BroadcastReceiver incomingSmsReceiver;).

Проблема в следующем:

Это работает нормально, пока процесс моего приложения не завершен.Когда пользователь нажимает «Начать прием трансляции» и после этого мое приложение убивается Android, я теряю ссылку incomingSmsReceiver (когда я запускаю свое приложение в следующий раз, по умолчанию оно установлено на null).Пользователь не может прекратить получать широковещательную рассылку, поскольку ссылка теряется.

Как сохранить эту ссылку? И как сделать возможным вызов getApplicationContext().unregisterReceiver(incomingSmsReceiver); после восстановления процесса приложения на Android

Ответы [ 2 ]

0 голосов
/ 18 декабря 2011

Я нашел лучшее решение для такой проблемы: Включение и отключение приемника вещания (ответ CommonsWare).

Решением является регистрация BroadcastReceiver в файле AndroidManifest. Затем использовать PackageManager.setComponentEnabledSetting (...) для включения / отключения этого компонента.

0 голосов
/ 18 декабря 2011

AFAIK, вам не нужно держаться той же самой ссылки BroadcastReciever. Создайте новую ссылку точно так же, как обычно, и передайте ее unregisterService.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...