3

我的应用程序在后台运行时没有在 Redmi 手机中收到推送通知,或者它被刷卡杀死了。

所以我试图通过 WorkManager 唤醒手机,它适用于除 Redmi 和其他中国定制 ROM 手机之外的许多手机。

这是我的 Worker 类代码

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

4 回答 4

1

还请看一下这个 小米、vivo、OPPO、华为默认限制后台服务。应用此解决方案后,我的 WorkManager 也开始工作。

于 2020-01-01T04:47:19.127 回答
0

WorkManager您使用的是哪个版本?我们修复了一些PeriodicWorkalpha05. alpha06已经出来了,我建议你尝试使用它。如果您仍然有同样的问题,请在问题跟踪器上报告问题跟踪器,并在问题跟踪器上提供可重现的测试用例。

于 2018-08-02T20:58:50.877 回答
0

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

在您的清单文件中添加这些权限可能会起作用。

于 2019-02-25T15:27:31.187 回答
0

WorkManager API 将在 Android Stock OS 设备或模拟器中很好地工作。小米、vivo 等定制的 ROM 默认将省电选项设置为“优化”,并且按预期不允许 WorkManager API。将省电模式设置为“无限制”,您的 WorkManager 将运行该任务。

我使用的是 1.0.1 版本,在对省电模式执行上述更改后,它适用于小米设备。

于 2019-12-24T07:10:59.953 回答