在China Phone中刷新应用程序后台服务已停止

时间:2018-01-05 06:18:02

标签: java android background-service huawei oppo

我一直在寻找有关中国手机(Oppo,华为,小米,Vivo等)的问题的答案,当应用程序被刷上(关闭),后台服务停止运行。

大多数解决方案都是:

  1. 包括START_STICKY并使用AlarmManager开始服务。
  2. 以编程方式将用户引导至自动启动管理器,以便用户启用应用程序。
  3. 手动将我的应用从省电模式中排除,或将我的应用包含为受保护的应用。
  4. 我的问题是,像Whatsapp这样的应用程序如何仍然收到消息或通知甚至刷过? 此外,如果手机重启,1和2中提到的解决方案不起作用,但Whatsapp如何仍能接收消息? 我测试了三星设备,即使应用程序被刷了,他们也可以运行后台服务。 有没有人面对中国手机的同样问题?

1 个答案:

答案 0 :(得分:3)

try {
            Intent intent = new Intent();
            String manufacturer = android.os.Build.MANUFACTURER;
            if ("xiaomi".equalsIgnoreCase(manufacturer)) {
                intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"));
            } else if ("oppo".equalsIgnoreCase(manufacturer)) {
                intent.setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.permission.startup.StartupAppListActivity"));
            } else if ("vivo".equalsIgnoreCase(manufacturer)) {
                intent.setComponent(new ComponentName("com.vivo.permissionmanager", "com.vivo.permissionmanager.activity.BgStartUpManagerActivity"));
            } else if ("oneplus".equalsIgnoreCase(manufacturer)) {
                intent.setComponent(new ComponentName("com.oneplus.security", "com.oneplus.security.chainlaunch.view.ChainLaunchAppListAct‌​ivity"));
            } else if ("Letv".equalsIgnoreCase(manufacturer)) {
                intent.setComponent(new ComponentName("com.letv.android.letvsafe", "com.letv.android.letvsafe.AutobootManageActivity"));
            } else if ("Honor".equalsIgnoreCase(manufacturer)) {
                intent.setComponent(new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity"));
            }
            else if ("huawei".equalsIgnoreCase(manufacturer)) {
                intent.setComponent(new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.optimize.process.ProtectActivity"));
            }
            else if ("asus".equalsIgnoreCase(manufacturer)) {
                intent.setComponent(new ComponentName("com.asus.mobilemanager","com.asus.mobilemanager.autostart.AutoStartActivity"));
            }
            else {
                Log.e("other phone ", "===>");
            }
            List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
            if (list.size() > 0) {
                startActivity(intent);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }