Фоновая служба убивается при удалении приложения из диспетчера задач в ColorOS - PullRequest
2 голосов
/ 01 апреля 2019

Я работаю над приложением, в котором один из сервисов должен работать всегда, чтобы выполнить какую-то конкретную операцию в фоновом режиме.Так что я перезапускаю службу с помощью Broadcast Receiver, когда бы она ни была убита из диспетчера задач.Так что для этого я беру разрешение Autostart / Battery Optimization от пользователя, чтобы снова его перезапустить.

Этот подход полностью работает практически со всеми ведущими производителями устройств, за исключением ColorOS и так далее.поскольку для моего приложения включено разрешение «Автозапуск / оптимизация аккумулятора», оно работает совершенно нормально на всех других устройствах, кроме ColorOS.

Причиной этого является то, что я не могу перенаправить пользователя на страницу настроек «Автозапуск» или «Оптимизация батареи»

Я пытался открыть Активность настроек автозапуска из своего приложения, используяэтот код:

Intent autostartIntent = new Intent();
autostartIntent.setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.permission.startup.StartupAppListActivity"));
startActivity(autostartIntent);

Также я попытался поиграть с настройками энергосбережения вручную, чтобы проверить, работает ли в любом случае.Но все равно ничего не работает.

Я бы искал способ перенаправить пользователя на страницу разрешений автозапуска или на страницу настроек оптимизации батареи.Любой, кто имел дело с подобной проблемой, может предложить какое-то решение или даже обходные пути для той же проблемы.

1 Ответ

0 голосов
/ 04 апреля 2019

Работай !!

Я перенаправил пользователя на страницу сведений о приложении, и там ему / ей нужно включить опцию автозапуска. Это позволит службе работать на ColorOS. Ниже приведен код для перенаправления пользователя на страницу сведений о приложении, и здесь пользователю необходимо включить автоматический запуск.

if ("oppo".equalsIgnoreCase(Build.MANUFACTURER)) {
    AlertDialog.Builder builder = new AlertDialog.Builder(PermissionsActivity.this);
    builder.setTitle("Allow Auto-startup");
    builder.setMessage("To access content on lock screen, enable ‘Allow Auto-startup’ for JiffyFeed");
    builder.setPositiveButton("Allow",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
                            Uri.fromParts("package", getPackageName(), null));
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(intent);
                }
            });

    builder.setNegativeButton("Deny", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            // Do something
        }
    });
    builder.show();
}

Кроме того, я также использовал обходной путь. Я использую NotificationListenerService , который продолжает работать всегда, поэтому я перезапускаю службу при получении нового уведомления, поэтому каждый раз, когда появляется новое уведомление, он запускает службу, которая мне нужна, чтобы всегда работать .

...