从 ColorOS 的任务管理器中删除应用程序时后台服务被杀死

Background service getting killed on removing the app from task manager on ColorOS

我正在开发一个应用程序,其中一项服务需要 运行 始终在后台执行某些特定操作。所以我正在使用广播接收器重新启动服务,每当它被任务管理器杀死时。因此,为此我正在获得用户的 Autostart/Battery 优化许可,以重新启动它。

除了 ColorOS 之外,几乎所有领先的设备制造商都可以使用此方法,只要为我的应用打开 "Autostart/Battery Optimization permission",它就可以正常工作在除 ColorOS 之外的所有其他设备上都完全正常。

这是因为我无法将用户重定向到 "AutoStart" 或 "Battery Optimization" 设置页面

我尝试使用以下代码从我的应用中打开自动启动设置 Activity:

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

我也尝试过手动使用省电设置来检查是否在任何情况下都有效。但无论如何似乎都没有用。

我会寻找一种方法将用户重定向到自动启动权限页面或电池优化设置页面。处理过类似问题的任何人都可以提出一些解决方案甚至解决方法。

成功了!!

我已将用户重定向到应用详细信息页面,he/she 需要打开自动启动选项。这将在 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,它始终保持 运行,因此我在收到新通知时重新启动服务,因此每次出现新通知时,它都会唤醒我需要一直保持 运行 的服务。