我想定期在Worker中更改通知的文本。 (androidx.work.WorkManager)
我的MainActivity看起来像这样
public class MainActivity extends AppCompatActivity {
...
private NotificationManagerCompat notificationManagerCompat;
private NotificationCompat.Builder notificationBuilder;
...
private void startNotification() {
...
notificationBuilder =
new NotificationCompat.Builder(getApplicationContext(), warnotifier_notification_channel)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle(notificationTitle)
.setContentText(notificationText)
.setContentIntent(pendingIntent)
.setAutoCancel(true)
.setPriority(NotificationCompat.PRIORITY_LOW)
.setOngoing(true);
notificationManagerCompat = NotificationManagerCompat.from(getApplicationContext());
notificationManagerCompat.notify(1, notificationBuilder.build());
PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(NotificationWorker.class, PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS, TimeUnit.MILLISECONDS)
.addTag(workTag)
.build();
WorkManager.getInstance(getApplicationContext()).enqueue(periodicWorkRequest);
}
...
}
我的工人看起来像这样
public class NotificationWorker extends Worker {
public NotificationWorker(@NonNull Context context, @NonNull WorkerParameters params) {
super(context, params);
}
@NonNull
@Override
public Result doWork() {
String notificationText = "Time: " + calendar.get(Calendar.HOUR_OF_DAY) + ":" + calendar.get(Calendar.MINUTE) + ":" + calendar.get(Calendar.SECOND);
notificationBuilder.setContentText(notificationText);
notificationManagerCompat.notify(1, notificationBuilder.build());
return Result.success();
}
}
不幸的是,Android不允许我将Worker作为嵌套类放置在MainActivity中,因此无法访问上述的NotificationManagerCompat和NotificationCompat.Builder实例。
我知道我可以将带有periodicWorkRequest.setInputData(inputData)
的简单数据传递给工作人员,但我认为这没有帮助...
有什么想法吗?预先感谢。
您可以创建具有相同ID的通知(因此为您的通知保留恒定ID)并进行通知。它会自动更新现有的]
NotificationManager notificationManager = (NotificationManager) getSystemService(
Context.NOTIFICATION_SERVICE);
if (notificationManager != null) {
Create a notification object with same ID as previous one and use notify to update the existing one.
}
[不幸的是,Android不允许我将Worker嵌套类在我的MainActivity中,因此我无法访问NotificationManagerCompat和NotificationCompat.Builder实例如上。
为什么需要在MainActivity中添加NotificationWorker类?
正如您提到的,您只想从NotificationManagerCompat
类访问NotificationCompat.Builder
和Worker
,对此没有任何限制,因此要构建通知,您已经将上下文传递给Worker
类构造函数,并且您仍然可以从getApplicationContext()
类中调用Worker
。我已经测试了,没有任何问题。
希望有帮助。如有任何疑问,欢迎您。