所以我使用PeriodicRequest每15分钟向我发送一次通知,但它根本没有出现。 一旦我杀死了应用程序,强制关闭的选项就会被禁用。 这难道不意味着没有后台进程在运行吗? 这就是我的通知不显示的原因吗?
PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder((BackgroundWork.class),
15, TimeUnit.MINUTES).build();
WorkManager.getInstance(this).enqueue(periodicWorkRequest);
下面的代码来自BackgroundWork类。
public Result doWork() {
NotificationCompat.Builder alertNotify = new
NotificationCompat.Builder(context1,"101")
.setContentTitle("Test")
.setContentText("Test notif")
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setSmallIcon(R.drawable.virus)
.setVisibility(NotificationCompat.VISIBILITY_PRIVATE)
.setAutoCancel(true); //removes notification when user clicks
NotificationManagerCompat notificationManager =
NotificationManagerCompat.from(context1);
notificationManager.notify(28,alertNotify.build());
DataParser download = new DataParser(context);
download.execute("https://api.covid19api.com/summary");
return Result.success();
您似乎还没有设置要添加通知的通知通道。 作为测试,是否可以在NotificationCompat.Builder
安装之前添加此代码?
//Kotlin
val notificationManager = NotificationManagerCompat.from(context)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
notificationManager.createNotificationChannel(NotificationChannel("101", "Test", NotificationManager.IMPORTANCE_DEFAULT))
}
//Java
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context1);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
notificationManager.createNotificationChannel(new NotificationChannel("101", "Test", NotificationManager.IMPORTANCE_DEFAULT));
}
在Android 8.0(API级别26)中必须将通知分配给通道。 请参阅此处的NotificationChannel文档
这很可能是通知没有显示在您的设备上的原因,但工作人员肯定仍在工作。 您可以在Debug output和Logcat窗口中看到工作人员所做工作的一些日志。 下面可以看到我自己测试的一些例子:
//Debug log
I/WM-WorkerWrapper: Worker result SUCCESS for Work [ id=aa30d1f6-8683-43b8-bf6d-67e7b38a6d75, tags={ com.test.stackoverflowtest.BackgroundWork } ]
//Logcat
2020-06-20 15:02:23.743 4827-4899/com.test.stackoverflowtest I/WM-WorkerWrapper: Worker result SUCCESS for Work [ id=aa30d1f6-8683-43b8-bf6d-67e7b38a6d75, tags={ com.test.stackoverflowtest.BackgroundWork } ]