gpt4 book ai didi

android - 在 android oreo 中设备重启后 PeriodicWorkRequest 不工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:41:30 26 4
gpt4 key购买 nike

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

  • A 类通知将每 24 小时显示一次。
  • B 类通知将每 7 天显示一次。
  • C 类通知将每 15 天显示一次。

我按如下方式使用了 PeriodicWorkRequest 工作管理器,在设备重新启动之前它工作正常。设备重启后,我的工作不会被触发。

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 文件:

<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 类上:

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 的类:

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 上)会在应用程序打开时打开。

@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 - 在 android oreo 中设备重启后 PeriodicWorkRequest 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51439450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com