Ответ 1
Телефоны Xiaomi, на которых работает MIUI, имеют встроенный блокировщик приложений для запуска. Возможно, это мешает вашему загрузочному приемнику.
Привет. Мы работаем над приложением android, где мы используем перезагружаемый ресивер, в котором я запускаю несколько сервисов, где я выполняю некоторые действия в сети.
Я понял, что в некоторых устройствах Android, таких как xiaomi etc reboot, приемник не работает.
Раньше я узнал, что в устройствах HTC также не работает, поэтому я добавил еще один фильтр намерений к нему <action android:name="android.intent.action.QUICKBOOT_POWERON" />
, после чего он начал работать нормально. Теперь другие телефоны, такие как xiaomi, все еще не работают.
Что я должен установить дополнительно, чтобы он работал нормально во всех устройствах, не запрашивая у пользователя никаких настроек вручную.
<receiver
android:name="com.xyz.broadcastreceiver.ServiceStarter"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
Спасибо заранее.
Телефоны Xiaomi, на которых работает MIUI, имеют встроенный блокировщик приложений для запуска. Возможно, это мешает вашему загрузочному приемнику.
Хорошо, попробуйте еще раз. У MIUI есть встроенное приложение безопасности. В приложении "Безопасность" есть раздел "Запуск", в котором пользователь может настроить, какое приложение может и какое приложение не может запускаться при запуске. Ваше приложение отключено по умолчанию. Также, если вы изучите свой Logcat, вы можете увидеть сообщение "отказано в доступе" при запуске. Поместите свое приложение вручную в приложения с белым списком, к сожалению, это ваши пользователи могут делать только.
Добавьте это в свой файл манифеста в фильтр намерений
<action android:name="android.intent.action.BOOT_COMPLETED" />
Xiomi имеет сообщение об ошибке только за 5 минут после использования этого ресивера
на самом деле загрузки -
http://xiaomi.eu/community/threads/alarmmanager-_wakeup-problem.21430/
Вы можете попробовать и добавить - android:enabled="true"
и android:exported="true"
хотя они должны быть установлены в true по умолчанию из-за системных изменений производителя
на Xiomi android-ориентированной ОС это может отличаться.
Просто обратите внимание на их значение
Так как на android:exported="true"
Позволит другим приложениям получить доступ к вашему ресиверу.
Попробуйте добавить категорию android.intent.category.DEFAULT
. Он обязателен для неявных намерений, но, возможно, он почему-то изменен на телефонах Xiaomi, и намерение не передает один из тестов полученных вашей заявкой.
Вам нужно добавить
android:enabled="true"
и
android:exported="true"
экспортируется может быть ложным, но необходимо включить экспортированный.
Я думаю, что проблема с ROM Xiaomi.eu, протестированная с помощью dev-версии, я использовал бета-версию MIUI 6.5.19 версии 7.4 на Xiaomi Redmi Note 2 Prime. Я не проверял стабильную версию, которая в настоящее время не может быть загружена для обслуживания сервера. Приемник широковещательной передачи не работает при загрузке.
Попробуйте одно и то же приложение в Xiaomi Mi 4 со стабильным Xiaomi Global ROM, MIUI 7.1.2, после активации автозапуска в диспетчере отлично работали. Перезагрузите и отлично обработайте широковещательный приемник и требуемые разрешения.
Теперь я тестировал с стабильной версией Xiaomi.EU 7.3, MIUI 7.3.2, широковещательный приемник отлично работает при загрузке и перезагрузке. Я зарегистрировал мой приемник с автозапуском в диспетчере безопасности, он не работает в версии ROM. Я не тестировался с Xiaomi Official ROM Global dev.
Мои разрешения:
<receiver android:name=".service.BootBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="android.intent.action.REBOOT"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
вы должны увидеть здесь. В устройствах Xiaomi они блокируют некоторые разрешения, даже если вы это требуете. Единственный способ использовать это - вы должны разрешить вашему приложению это разрешение вручную.
Я предлагаю добавить android: enabled = "true", но он уже был предложен.
Итак, я могу сказать вам, что вы сначала убедитесь, что правильно зарегистрирован приемник или нет. Вы также можете попробовать другую версию его регистрации - это регистрация программно (желательно в onPause() и onResume()) и посмотреть, принимает ли она широковещательное сообщение или нет.
Существует встроенная функция MIUI, которая предотвращает перезапуск приложений для экономии заряда батареи и оперативной памяти. Вы должны вручную включить опцию Auto Start, чтобы получать трансляции для BOOT_COMPLETED. Перейдите в Настройки> Установленные приложения> Ваше приложение. Затем просто включите опцию автоматического запуска. Нет возможности предотвратить это программно. Вместо этого вы можете информировать пользователей вашего приложения, если они сталкиваются с проблемами во время использования вашего приложения (например, тревога не срабатывает должным образом), они могут включить автоматический запуск из настроек.
Попробуйте отключить оптимизацию MUIU в настройках разработчика. Это сработало для меня.
1- Перейти в настройки
2- Открыть дополнительные настройки
3- Открыть параметры разработчика
4- Найти Turn on MIUI optimization
5- Отключить кнопку переключения.