2015-04-14 3 views
22

Привет, Мы работаем над приложением для Android, в котором мы используем ресивер, в котором я запускаю несколько сервисов, где я выполняю некоторые операции с сетью.Reboot приемник не работает в телефонах xiaomi

Я понял, что в некоторых устройствах Android, таких как xiaomi и т. Д. Перезагрузка приемника не работает.

Раньше я узнал, что в устройствах 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> 

Заранее спасибо.

+0

QUICKBOOT_POWERON может быть проблемой, это доступно только на некоторых устройствах ... удалите его и повторите попытку ... – Opiatefuchs

+0

@Opiatefuchs Если я укажу два действия в фильтре намерений, то это означает, что оба они требуются уволить это событие? –

+0

@Opiatefuchs см. Это также http://stackoverflow.com/a/21294637 –

ответ

3

Xiomi имеет сообщили об ошибке для только с помощью этой Ресивер 5 минут после того, как система
фактически загрузки вверх -
http://xiaomi.eu/community/threads/alarmmanager-_wakeup-problem.21430/
Вы можете попробовать и добавить -

андроида: включено = «истина» и андроид: exported = "true"
, хотя по умолчанию они должны быть установлены в true из-за изменений системы изготовителя.
это может отличаться от ОС iOS, настроенной на Xiomi android.
Просто обратите внимание на их значение.
Поскольку андроид: exported = "true"
Позволит другим приложениям получить доступ к вашему ресиверу.

+0

что это означает «этот приемник через 5 минут после системы»? –

+0

В основном приемники - это объекты, которые регистрируются в системной службе, которая отвечает за уведомление по определенным параметрам в настраиваемой ОС Xiomi, возможно, они делают это только после проверки некоторых вещей, таких как заряд батареи и т. Д. Я только угадываю. – CrazyPixel

+0

Это не работает для меня .. :( –

3

Попробуйте добавить категорию android.intent.category.DEFAULT. Он является обязательным для неявных намерений, но, возможно, он почему-то настраивается на телефонах Xiaomi, и намерение не передает один из tests, который будет получен вашим приложением.

+0

не работает для меня :( –

6

Добавить это в файле манифеста в намерениях фильтра

<action android:name="android.intent.action.BOOT_COMPLETED" /> 
+1

Это уже есть '<намеренный фильтр> 'или вы говорите для чего-то еще –

8

Xiaomi телефоны под управлением MIUI имеют встроенный запуск у приложений блокатора. Возможно, это мешает вашему загрузочному приемнику.

+0

Хорошо, но что делать, чтобы оно работало –

+1

Ничего не вышло, как разработчик приложения. Это настройки уровня ОС. Аналогичные настройки могут использоваться в любых корневых устройствах с использованием некоторых приложений, таких как Rom Toolbox и т. Д. [link] (https://play.google.com/store/apps/details?id= com.jrummy.liberty.toolbox) Но если вы используете белый список своего приложения в блокировщике запуска, ld все еще работает. –

+0

Есть ли способ отключить его? – milosmns

0

Я предлагаю добавить android: enabled = "true", но он уже был предложен.

Итак, я могу сказать вам, что сначала убедитесь, что вы правильно зарегистрировали приемник или нет. Вы также можете попробовать другую версию его регистрации - это регистрация программно (желательно в onPause() & onResume()) и посмотреть, принимает ли она широковещательное сообщение или нет.

4

Хорошо, попробуем еще раз. У MIUI есть встроенное приложение безопасности. В приложении «Безопасность» есть раздел «Запуск», в котором пользователь может настроить, какое приложение может и какое приложение не может запускаться при запуске. Ваше приложение отключено по умолчанию. Также, если вы изучите свой Logcat, вы можете увидеть сообщение «отказано в доступе» при запуске. Поместите свое приложение вручную в приложения с белым списком, к сожалению, это ваших пользователей может делать только.

2

Вам нужно добавить

android:enabled="true" 

и

android:exported="true" 

экспортироваться может быть ложным, но необходимо включать экспорт.

Я думаю, что это проблема с ROM Xiaomi.eu, протестированная с помощью dev-версии, я использовал версию MIUI 6.5.19 Beta 7.4 на Xiaomi Redmi Note 2 Prime. Я не проверял стабильную версию, которая в настоящее время не может быть загружена для обслуживания сервера. Приемник Broadcast не работает при загрузке.

Probe же приложение в Xiaomi Mi 4 со стабильным Xiaomi Global ROM, MIUI 7.1.2, отлично работало после активации автозапуска в менеджере. Перезагрузите и отлично обработайте широковещательный приемник и требуемые разрешения.

Теперь я тестировал с помощью Xiaomi.EU 7.3 stable, 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> 
+0

У вас есть работа? Я обнаружил, что «расписание power off/on» не отправляет BOOT_COMPLETED на Mi4i –

+0

Я нашел использовать стабильную версию, чтобы исправить эту проблему. –

1

вы должны увидеть here. В устройствах Xiaomi они блокируют некоторые разрешения, даже если вы это требуете. Единственный способ использовать это - вы должны разрешить вашему приложению это разрешение вручную.