Запуск службы переднего плана в китайских ПЗУ

Я сделал службу переднего плана для постоянного сканирования окружающих меня устройств BLE. По какой-то причине он, кажется, безупречно работает на моем стандартном Android-устройстве Google Pixel, а также на Samsung S9 +.

Но недавно я протестировал приложение с китайским ПЗУ (Oneplus 6T, Xiaomi Poco F1), служба переднего плана, похоже, перестала работать через несколько минут. Я использовал workmanager для перезапуска службы, но приложение не перезапускается, и вместо этого я получаю отчет об ошибке для приложения.

Также на китайских устройствах с ПЗУ ниже Android 8.0 (Xiaomi redmi 3s Prime) простая служба не работает, мне также нужно использовать службу переднего плана. Есть ли какое-нибудь решение этой проблемы?


person Divye Shah    schedule 29.11.2018    source источник
comment
подумайте об использовании wakelocks   -  person GeekWithGlasses    schedule 29.11.2018
comment
пожалуйста, добавьте код, который вы пробовали.   -  person Radhey    schedule 29.11.2018
comment
@GeekWithGlasses уже сделал это.   -  person Divye Shah    schedule 29.11.2018
comment
См. stackoverflow.com/questions/52647496/   -  person Andrea Scalabrini    schedule 29.11.2018
comment
@ ofer2980 Нужно настраивать решение под каждый ПЗУ. Также включите оптимизацию батареи, используя диалог для намерения ACTION_BATTERY_SAVER_SETTINGS. Однако это не является отказоустойчивым, для этого вам нужно отключить настройки глубокой оптимизации батареи в каждой сборке.   -  person Divye Shah    schedule 08.01.2019
comment
@DivyeShah, ты в конце концов решил свою проблему? У меня такая же проблема   -  person Keselme    schedule 11.06.2020
comment
@Keselme Не повезло, вам нужно внести свой сервис в белый список, взяв разрешения, а также keep и jobScheduler, чтобы проверить, убивает ли ПЗУ ваше приложение.   -  person Divye Shah    schedule 27.09.2020


Ответы (2)


Попросите пользователей внести ваше приложение в белый список. Это единственное решение. Даже сервис переднего плана + блокировка пробуждения не сработает.

В прошлом месяце было обсуждение: Надежность Workmanager для периодических задач на китайских ромах (Xiaomi, Huawei и т. д.). Там есть несколько полезных ссылок, но в конечном итоге вам придется разрешить пользователям вносить ваше приложение в белый список в каждом Параметры оптимизации батареи ПЗУ (или другое имя).

person Dewey Reed    schedule 29.11.2018
comment
@DeweyReed Сейчас я использую Xiaomi Poco F1 и OnePlus 6T. В OnePlus 6T я отказался от оптимизации в своих приложениях, но это убито. и на Poco F1 автоматический запуск включен, но я все еще сталкиваюсь с проблемой, когда он прерывается и должен быть перезапущен WorkManager или намерением. Вы можете пролить свет на это? - person Divye Shah; 29.11.2018
comment
@DivyeShah Боюсь, что не могу. У меня нет ни одного из этих телефонов, и процедура добавления в белый список совершенно другая. Но в этой ссылке вы можете найти эту ссылку bitbucket.org/copluk/acr/issues/607 < / а>. Есть полезные демонстрационные картинки. - person Dewey Reed; 29.11.2018
comment
@DeweyReed Под белым списком вы подразумеваете отключение оптимизации батареи, верно? - person Divye Shah; 29.11.2018
comment
@DeweyReed, это очень помогло! Спасибо, но китайские ПЗУ - это кошмар. Я не знаю, как мне убедить пользователей отказаться от этих оптимизаций батареи! - person Divye Shah; 29.11.2018
comment
@DeweyReed Я только что заметил после установки ACR на моем OnePlus, он не запрашивает разрешения на оптимизацию батареи, но продолжает работать, как это возможно? - person Divye Shah; 04.12.2018
comment
@DivyeShah Что такое ACR? Все, что я могу сделать, это предположить. Может быть, OnePlus внес его в белый список? Некоторые популярные приложения имеют такую ​​привилегию. - person Dewey Reed; 04.12.2018
comment
@DeweyReed Попробуйте установить truecaller из игрового магазина и в настройках перейдите в Caller ID и игнорируйте оптимизацию батареи (Idk, как они принимают это разрешение специально для приложения). Затем, когда вы получаете вызов, служба переднего плана запускается мгновенно !! Дай мне знать, если найдешь что-нибудь! Кстати, ACR (автоматический регистратор вызовов) остановился через некоторое время без разрешений на оптимизацию. - person Divye Shah; 04.12.2018
comment
@DivyeShah Спасибо за объяснение. Я посмотрю что я могу сделать. - person Dewey Reed; 05.12.2018
comment
@DeweyReed Я пробовал intent.setAction (Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); но кажется, что он отличается от intent.setAction (Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS); Я попробовал первый и получил это разрешение в диалоге, но второй перенаправляет пользователя на страницу оптимизации батареи. - person Divye Shah; 05.12.2018
comment
@DivyeShah Обычно приложению не нужно игнорировать оптимизацию заряда батареи. Достаточно службы переднего плана и блокировки пробуждения. Китайские ПЗУ используют собственный фоновый менеджер, который является основным убийцей. - person Dewey Reed; 05.12.2018
comment
@DeweyReed Значит, настройки, показанные в ссылке на проблемы github, которой вы поделились, необходимы для его работы на устройствах Android 8+ независимо от оптимизации батареи? Вы также пробовали truecaller? Экспериментировал, но не мог понять, как это работает - person Divye Shah; 05.12.2018

Простым подходом было бы попросить пользователя поместить ваше приложение в неоптимизированные приложения, открыв настройки оптимизации батареи при запуске вашего приложения. Используйте приведенный ниже код, чтобы открыть настройку:

    Intent batterySaverIntent=new Intent(Settings.ACTION_BATTERY_SAVER_SETTINGS);
startActivity(batterySaverIntent);

Или вы можете попробовать это:

  @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        startForegroundService(new Intent(this, ServiceClass.class));
    }
person Vikash Bijarniya    schedule 29.11.2018
comment
Я пробовал, но он оставался на один час, теперь я жду, когда он перезапустится с помощью workmanager, какие-нибудь идеи? - person Divye Shah; 29.11.2018