对于某些设备(例如oppo,vivo,MI等),以Doze模式杀死了前台服务

时间:2019-04-12 13:13:45

标签: java android alarmmanager foreground-service

我正在使用前台服务来跟踪用户的实时位置。它在现有的android设备中运行良好,但是在oppo,vivo,Mi等品牌中,当设备进入打mode模式时,该应用将被终止。我也尝试使用仍无用的FCM通知。我只是想知道Uber或Ola是否能够破解这个问题,因为我已经看到大多数驱动程序都在使用这些品牌。如何在打ze模式下保持其应用程序的生命?

2 个答案:

答案 0 :(得分:0)

  

您需要为oppo,vivo和mi中的应用启用自动启动权限

     

尝试以下代码对我有用

 private void keepServicesInChineseDevices() {
        Intent intent = new Intent();

        String manufacturer = android.os.Build.MANUFACTURER;

        switch (manufacturer) {

            case "xiaomi":
                intent.setComponent(new ComponentName("com.miui.securitycenter",
                        "com.miui.permcenter.autostart.AutoStartManagementActivity"));
                break;
            case "oppo":
                intent.setComponent(new ComponentName("com.coloros.safecenter",
                        "com.coloros.safecenter.permission.startup.StartupAppListActivity"));

                break;
            case "vivo":
                intent.setComponent(new ComponentName("com.vivo.permissionmanager",
                        "com.vivo.permissionmanager.activity.BgStartUpManagerActivity"));
                break;
        }

        List<ResolveInfo> arrayList = getPackageManager().queryIntentActivities(intent,
                PackageManager.MATCH_DEFAULT_ONLY);

        if (arrayList.size() > 0) {
            AppDataHolder.getSession(MyApplication.getAppContext()).setPermissionForChineseDevices(true);
            startActivity(intent);
        }
    }

this article is also helpful

答案 1 :(得分:0)

非常感谢你们的回应。我想告诉您,我给Google支持写了一封电子邮件,并向Google支持强调了该问题,下面是他们提到的回复: “感谢您伸出手。

似乎您不能在某些Android设备上收到推送通知。检查受影响的设备后,它会受到特定于设备的(已知)问题的影响,并且是由用于电池优化的OEM功能引起的。刷掉应用程序后,在某些已实现此功能的OEM中,该应用程序的处理方式类似于“强制停止”机制,并且向刷过该应用程序注册的服务也将停止。

就目前而言,我强烈建议与那些受影响的OEM的支持团队联系,以帮助最终解决该问题。 您可以在此博客文章(https://www.freecodecamp.org/news/why-your-push-notifications-never-see-the-light-of-day-3fa297520793/)中了解有关此问题的更多信息以及解决该问题的可能方法。