Android BroadcastReceiver не работает после установки - PullRequest
4 голосов
/ 25 апреля 2011

Привет!Я работаю над приложением, у которого BroadcastReceiver прослушивает «android.intent.action.PHONE_STATE», которое запускается при изменении состояния телефона (я использовал его для запуска кода при обнаружении входящего вызова).Это прекрасно работает на большинстве моих тестовых телефонов, но некоторые, кажется, не вызывают приемник вообще.Однако после перезапуска этих проблемных телефонов все работает, как и ожидалось.

Существует ли причина, по которой эти телефоны необходимо перезапустить, прежде чем BroadcaseReceiver сможет что-либо поднять?Есть ли способ определить, не запущен ли он, и вручную «запустить» BroadcaseReceiver?Я в тупике, поэтому я был бы признателен за любую помощь, которую вы можете предложить.

Спасибо.

Ответы [ 2 ]

16 голосов
/ 18 августа 2011

Для расширения вопроса: начиная с Android 3.1, установленные приложения переводятся в состояние «ОСТАНОВЛЕНО». Для вызова BroadcastReceiver (s) из остановленного приложения требуется дополнительный флаг намерения вещания .

Подробнее: http://developer.android.com/sdk/android-3.1.html#launchcontrols

Я создал FLAG_INCLUDE_STOPPED_PACKAGES константу (= 32) в своем приложении (для версий до Android 3.1) и просто добавил ее в свое намерение вещания intent.addFlags(FLAG_INCLUDE_STOPPED_PACKAGES);

3 голосов
/ 25 апреля 2011

Есть ли причина, по которой эти телефоны должны быть перезапущены, прежде чем BroadcaseReceiver сможет что-либо поднять?

Если ваше приложение зарегистрировало BroadcastReceiver в манифесте для трансляции PHONE_STATE, оно должно работать сразу после установки. Если это не так, мне кажется, что глючит ПЗУ.

Есть ли способ определить, не запущен ли он, и вручную "запустить" BroadcaseReceiver?

Нет, в основном потому, что он не работает, обычно, даже когда все работает. Экземпляр вашего BroadcastReceiver создается в точке совпадения Intent - <intent-filter>, он вызывается с onReceive(), и BroadcastReceiver удаляется после возврата onReceive().

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