Фоновая служба отключается при удалении приложения из диспетчера задач в ColorOS

Я работаю над приложением, в котором одна из служб должна работать всегда, чтобы выполнять определенную операцию в фоновом режиме. Поэтому я перезапускаю службу с помощью широковещательного приемника всякий раз, когда его убивают из диспетчера задач. Поэтому для этого я беру у пользователя разрешение на автозапуск / оптимизацию батареи, чтобы снова перезапустить его.

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

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

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

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

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

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


person Kunal    schedule 01.04.2019    source источник


Ответы (1)


Заработало!!

Я перенаправил пользователя на страницу сведений о приложении, и там ему нужно включить параметр «Автозапуск». Это позволит службе работать в 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, который продолжает работать всегда, поэтому я перезапускаю службу при получении нового уведомления, поэтому каждый раз, когда появляется новое уведомление, он пробуждает службу, которую мне нужно продолжать работать. всегда.

person Kunal    schedule 04.04.2019