Служба Foreground отключена в режиме Doze для некоторых устройств, таких как OPPO, VIVO, MI и т. Д. - PullRequest
0 голосов
/ 12 апреля 2019

Я использую службу переднего плана для отслеживания местоположения пользователя в реальном времени.в стандартных Android-устройствах он работает нормально, но в таких брендах, как oppo, vivo, Mi и т. д., приложение убивается, когда устройство переходит в режим ожидания.Я также пытался использовать уведомления FCM, которые по-прежнему бесполезны.Мне просто интересно, удалось ли Uber или Ola взломать это, потому что я видел, что большинство водителей использовали эти бренды.Как сохранить приложение в режиме ожидания?

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

Большое спасибо, ребята, за ваши ответы.Я хотел бы сообщить вам, что я написал письмо в службу поддержки Google и выделил проблему в службу поддержки Google, в ответ они упомянули ниже ответ: «Спасибо за обращение.

Похоже, вы не можете получитьpush-уведомление на некоторых устройствах Android.После проверки уязвимого устройства на него влияет специфическая (известная) проблема устройства, и она вызвана функциями OEM для оптимизации батареи. Когда приложение удаляется, в некоторых OEM, которые реализовали такиефункция, приложение обрабатывается аналогично механизму «принудительной остановки», а службы, зарегистрированные в приложении, которое было перелистано, остановлены.

На данный момент я настоятельно рекомендую обратиться в службу поддержки этих затронутых OEM-производителей, чтобы помочь получитьона решена с их конца. Подробнее об этой проблеме и возможных способах ее решения можно прочитать в этом блоге (https://www.freecodecamp.org/news/why-your-push-notifications-never-see-the-light-of-day-3fa297520793/).

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

вам нужно включить разрешение автоматического запуска для приложений в OPPO, VIVO и MIL

, попробуйте приведенный ниже код, сработавший для меня

 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);
        }
    }

эта статьятакже полезно

...