Обратный вызов WorkManager doWork не принимается в Redmi и других пользовательских китайских ПЗУ при перезагрузке устройства и принудительном закрытии приложения

Мое приложение не получает push-уведомления на телефонах Redmi, когда оно работает в фоновом режиме или оно было отключено при смахивании.

Поэтому я пытаюсь разбудить телефон с помощью WorkManager, который работает на многих телефонах, кроме Redmi и других китайских телефонов с пользовательским ПЗУ.

Вот мой код рабочего класса

public class OpenTalkWorkManager extends Worker {

@NonNull
@Override
public Result doWork() {

    Log.i("wake_up", "Waking up now: " + System.currentTimeMillis());

    FirebaseUtils.getInstance().updateUserPresenceStatus(getApplicationContext(), "yes");

    Intent intent = new Intent("com.opentalk.WAKE_UP");
    getApplicationContext().sendBroadcast(intent);

    return Result.SUCCESS;
}

Я пытаюсь поставить работу в очередь через PeriodicWorkRequest

PeriodicWorkRequest.Builder mPeriodicWorkRequest = new PeriodicWorkRequest.Builder(OpenTalkWorkManager.class, 4, TimeUnit.MINUTES);
    Constraints myConstraints = new Constraints.Builder()
            .setRequiresBatteryNotLow(false)
            .setRequiredNetworkType(NetworkType.NOT_REQUIRED)
            .setRequiresCharging(false)
            .setRequiresDeviceIdle(false)
            .setRequiresStorageNotLow(false)

            // Many other constraints are available, see the
            // Constraints.Builder reference
            .build();
    PeriodicWorkRequest myWork = mPeriodicWorkRequest.setConstraints(myConstraints).build();

    UUID compressionWorkId = myWork.getId();
    WorkManager.getInstance().cancelWorkById(compressionWorkId);

    WorkManager.getInstance().enqueue(myWork);

person Sujeet Kumar Mehta    schedule 02.08.2018    source источник


Ответы (4)


Какую версию WorkManager вы используете? Мы исправили несколько ошибок, связанных с PeriodicWork и принудительной остановкой приложений в alpha05. alpha06 отсутствует, и я рекомендую вам попробовать его. Если проблема не исчезла, сообщите об этом в системе отслеживания проблем с помощью воспроизводимого тестового примера в системе отслеживания проблем.

person Rahul    schedule 02.08.2018
comment
Рахул, спасибо за ответ. В настоящее время я использую alpha05. Я собираюсь опробовать это с alpha06, чем сообщу вам отчет. - person Sujeet Kumar Mehta; 03.08.2018
comment
Я попробовал с alpha06 и проверил, что он действительно запускается после перезагрузки в Redme, если в нем включен автозапуск, если автозапуск не включен, то обратный вызов doWork не получен. Также, когда он запускается после перезагрузки, чем в doWork, интернет-вызовы не выполняются в фоновом режиме. Пожалуйста, дайте мне знать, могу ли я использовать alpha06 для моего профессионального приложения. Какова ориентировочная дата стабильного выпуска этого API? - person Sujeet Kumar Mehta; 03.08.2018
comment
Я создал новую проблему в идентификаторе системы отслеживания проблем: 112159719 - person Sujeet Kumar Mehta; 03.08.2018
comment
@Rahul Почему WorkManager не работает на устройствах xiomi, если автозапуск выключен (по умолчанию автозапуск выключен), я использую alpha08 также на всех новых устройствах, таких как vivo, oppo, oneplus и т. Д., Они ограничивают фоновое обслуживание, тогда в чем смысл с помощью Jobscheduler или WorkManager. Большинство пользователей на рынке - это устройства, о которых я упоминал выше. Не могли бы вы рассказать мне, как это сделать? Нам нужно четкое решение от Google, потому что это серьезная проблема. - person Samwinishere Here; 29.08.2018
comment
@ Samwinishere Здесь Вы нашли какое-нибудь решение? Я также борюсь с той же проблемой, я нашел несколько очень хитрых способов сделать это, но я ищу несколько хороших практик. - person Divyanshu Negi; 30.01.2019
comment
@Rahul, любые новости по этому поводу! или все еще открыто? - person Radhey; 07.05.2019
comment
Я использую androidx.work:work-runtime:2.1.0 и все еще не выполняюсь (Xiomi), только когда я открываю приложение, которое оно запускает, на эмуляторе работает нормально - person Pavel Poley; 26.07.2019
comment
@PavelPoley правда. Даже я использую ту же версию и сталкиваюсь с той же проблемой. Раньше он отлично работал с MIUI 8 и 9, но с MIUI 10 он действительно работает не так, как ожидалось. - person Vrajesh Hirani; 14.08.2019

Также ознакомьтесь с этим Xiaomi, Vivo, Oppo и huawei по умолчанию ограничивают фоновые службы. После применения этого решения мой WorkManager также начал работать.

person Behrad Ranjbar    schedule 01.01.2020

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-permission android:name="android.permission.WAKE_LOCK" />

Добавьте эти разрешения в свой файл манифеста, это может сработать.

person RANAJEET BARIK    schedule 25.02.2019
comment
Кто-нибудь пробовал? - person Mayank Sharma; 25.04.2020

WorkManager API будет хорошо работать, как это задокументировано на устройствах Android Stock или в эмуляторе. Настроенные ПЗУ, такие как Xiaomi, Vivo и т. Д., Имеют параметр экономии заряда батареи, установленный по умолчанию на «оптимизированный», и не позволяют использовать WorkManager API, как ожидалось. Установите для параметра Battery Saver значение «без ограничений», и ваш WorkManager выполнит задачу.

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

person Kamal S    schedule 24.12.2019