Запуск приложения из BroadCastReceiver (NEW_OUTGOING_CALL не всегда работает)
Итак, я написал приложение, которое начинается с набора определенного номера, я использовал NEW_OUTGOING_CALL(получатель широкого спектра), чтобы перехватить событие набора номера. До сих пор получатель широкого спектра в моем AndroidManifest.xml похож на следующий код:
<receiver android:name=".CustomBroadCastReceiver">
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
Проблема в том, что когда я пробую его на новой системе, он сначала не работает, но после нескольких тестов он начинает работать. Я проверил журналы Android и думаю, что он даже не регистрируется в качестве приемника вещания. Я не смог найти причину такого поведения в справочнике по Android, и хочу узнать, не сталкивался ли кто-нибудь с такой же проблемой и не нашел ли ее решения,
Пожалуйста, примите во внимание, что этот широкополосный приемник является стартовым триггером моего приложения.
Я также прочитал кое-что об остановленных пакетах, и я хочу знать, связано ли это с моим делом, и если это так, есть ли способ установить флаги, такие как FLAG_INCLUDE_STOPPED_PACKAGES на AndroidManifest.xml
====== ====== Отредактировано
После того, как я в первый раз вызываю следующую команду в оболочке adb
am broadcast -n com.package.name/.StartApp
Эта строка появляется в журнале эмулятора
06-15 11:17:53.216: INFO/ActivityManager(74): Start proc com.package.name for broadcast com.package.name/.StartApp: pid=2153 uid=10041 gids={3003}
И тогда получатель широкого набора регистрируется в эмуляторе. Похоже, мое приложение должно быть запущено для регистрации получателя широкого диапазона.
1 ответ
Я не смог найти ничего в документации Android, но, потратив часы на тестирование этого случая на разных устройствах, я обнаружил, что приемники вещания регистрируются только после выполнения приложения. Таким образом, очевидно, что одно действие должно быть запущено после установки, и тогда все работает отлично.