OnTaskRemoved() не получает вызов в устройствах HUAWEI и XIOMI
Я использовал метод onTaskRemoved()
в службе, чтобы обнаружить, когда приложение было удалено из списка устройств RECENT, отмахиваясь от него. Я заготовлю несколько протоколов и некоторые другие операции, которые должны произойти, когда это произойдет.
Он отлично работает.
Затем я проверил этот метод на устройстве HUAWEI под управлением Android 6.0.
Метод никогда не вызван. Я также добавил вызов Log.d и, как и ожидалось, этот журнал так и не появился. То же самое происходит на устройстве XIOMI.
Любые идеи, почему это происходит и как это разрешить? Или существует другой способ обнаружить приложение, которое было удалено из списка RECENT без использования onTaskRemoved()
?
Спасибо
Ответы
Ответ 1
Когда пользователь установил ваше приложение на устройстве xiaomi, перенаправляйте пользователя на автоматический запуск и говорите пользователю о включении:
if (Build.BRAND.equalsIgnoreCase("xiaomi")) {
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"));
startActivity(intent);
}
Используйте приведенный выше код для запуска страницы активности автозапуска на xiaomi
Ответ 2
На некоторых устройствах (некоторые LG, Huawei, Xiaomi и другие) ваше приложение должно быть добавлено вручную в список "защищенных приложений" или "приложений, разрешенных для работы в фоновом режиме", чтобы Android перезапустился Услуги STICKY. Если ваше приложение не добавлено вручную в этот список, Android просто убивает ваши процессы и не перезапускает их, а также не вызывает onTaskRemoved()
. Это делается для экономии времени работы от батареи, ограничивая количество приложений, которые могут иметь службы STICKY, работающие в фоновом режиме.
На таких устройствах вы должны увидеть страницу в "Настройках", иногда под "управлением питанием", иногда в других местах, где вам нужно явно добавить приложение. Вам также нужно будет сообщить своим пользователям, чтобы явное добавление вашего приложения в этот список.
Ответ 3
Я использую метод onTaskRemoved() в службе, чтобы обнаружить, когда приложение было удалено из списка устройств RECENT, отрывая его.
С большей освещенностью ответа Дэвида Вассера
Это не ново для Xiaomi, потому что у Xiaomi есть функция, называемая разрешением приложения, где пользователь должен разрешить приложению автоматически запускаться (Service). В вашем случае Service
не вызывается, после его завершения из стека.
Пойдите так и разрешите автозапуск приложения:
Settings > permissions > Autostart
Ответ 4
В My Huawei также я столкнулся с проблемой, просто зайдите в Настройка => Энергосбережение => Защитить приложение => найдите свое приложение и включите его.. Служба запустится..
Ответ 5
Отказ от ответственности: это не хорошее решение.. Это взломать
Вы можете предотвратить уничтожение приложения пользователем
В вашем Манифесте → тег внутренней активности → Добавить следующую строку
андроид: excludeFromRecents = "истина"
Ваше приложение не отображается в истории последних приложений. Таким образом, пользователь не может убить приложение.