在android oreo中重启设备后PeriodicWorkRequest不起作用 [英] PeriodicWorkRequest not working after device reboot in android oreo

查看:38
本文介绍了在android oreo中重启设备后PeriodicWorkRequest不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要根据以下逻辑向用户推送应用通知.

I have requirement of pushing in app notification to user based on following logic.

  • 类型 A 通知将在每 24 小时后显示一次.
  • B 类通知将在每 7 天后显示一次.
  • C 类通知将在每 15 天后显示一次.

我使用了 PeriodicWorkRequest 工作管理器,如下所示,在设备重新启动之前它工作正常.一旦设备重新启动,我的工作就不会被触发.

I have used PeriodicWorkRequest work manager as follows, it's working fine until the device is restarted. Once device is restarted, my work is NOT getting triggered.

build.gradle ---

build.gradle ---

implementation 'android.arch.work:work-runtime:1.0.0-alpha04'

Java 代码

PeriodicWorkRequest showNotification =
                new PeriodicWorkRequest.Builder(ShowNotificationWorkManager.class, interval,
                        TimeUnit.HOURS)
                        .addTag(notificationType)
                        .setInputData(myData)
                        .build();

getWorkManger().enqueue(showNotification);

推荐答案

我已经尝试过这段代码 &与我一起研究旧 API 和新 API:此代码在设备重新启动时每 15 分钟执行一次服务(workmanager).对于 AndroidManifest.xml 文件:

I've tried this code & worked with me on old APIs and new ones: This code which executes the service (workmanager) every 15 min when the device reboots. for AndroidManifest.xml file:

<receiver android:name=".WorkManagerStartReceiver" >
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <action android:name="android.intent.action.QUICKBOOT_POWERON" />
    </intent-filter>
</receiver>

在 WorkManagerStartReceiver 类上:

And on WorkManagerStartReceiver class:

public class WorkManagerStartReceiver extends BroadcastReceiver {
    WorkManager mWorkManager;

    @Override
    public void onReceive(Context context, Intent intent) {

        PeriodicWorkRequest.Builder myWorkBuilder =
                new PeriodicWorkRequest.Builder(TestWorker.class,
                        PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS,
                        TimeUnit.MILLISECONDS);

        PeriodicWorkRequest myWork = myWorkBuilder.build();
        mWorkManager = WorkManager.getInstance(context);
        mWorkManager.enqueue(myWork);

    }
}

虽然 TestWorker.class 是扩展 Worker 的类:

While TestWorker.class is the class that extends Worker:

public class TestWorker extends Worker {

    public TestWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
        super(context, workerParams);
    }

    @NonNull
    @Override
    public Result doWork() {

        //your work that you want to execute here
        return null;
    }
}

如果您希望服务在应用打开时开始工作,那么这个片段(在 MainActivity 上)会在应用打开时打开.

And this snippet (on MainActivity) that opens when the app opens if you want the service to start working when the app opens.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    PeriodicWorkRequest.Builder myWorkBuilder =
            new PeriodicWorkRequest.Builder(TestWorker.class,
                                            PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS,
                                            TimeUnit.MILLISECONDS);
    PeriodicWorkRequest myWork = myWorkBuilder.build();
    WorkManager.getInstance(MainActivity.this)
            .enqueueUniquePeriodicWork("testworker", ExistingPeriodicWorkPolicy.KEEP, myWork);
}

这篇关于在android oreo中重启设备后PeriodicWorkRequest不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆