好的,我认为标题是不言自明的...我必须使用WorkManager api来安排一个通知,该通知将在设备每次连接到互联网并且正在充电(插入)时显示。我设法创建了一个工作程序并使其显示通知,但是这里的问题是它只显示了一次通知。之后,即使我断开/重新连接到wifi并拔下/插入电缆,它也不会显示通知。
val notificationTriggerConstraint = Constraints.Builder()
.setRequiredNetworkType(NetworkType.UNMETERED)
.setRequiresCharging(true)
.build()
val notificationWorker = OneTimeWorkRequest.Builder(NotificationWorker::class.java)
.setConstraints(notificationTriggerConstraint)
.build()
class NotificationWorker(@NonNull context: Context, @NonNull workerParameters: WorkerParameters) : Worker(context, workerParameters) {
override fun doWork(): Result {
val notificationBuilder = NotificationCompat.Builder(applicationContext, "CHANNEL")
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle("Background job")
.setContentText("Device is charging and connected to WIFI")
.setStyle(NotificationCompat.BigTextStyle().bigText("Device is charging and connected to WIFI"))
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
val notificationManager = NotificationManagerCompat.from(applicationContext)
notificationManager.notify(0, notificationBuilder.build())
return Result.SUCCESS
}}
这些是约束和创建通知的工作程序。我不能使用PeriodicWorkRequest,因为那不是应用程序应该工作的方式。有人可以在这里建议一种方法吗?谢谢
答案 0 :(得分:0)
在这种情况下,我认为WorkManager不是最佳选择。
在特定情况下,您使用的是OneTimeWorkRequest
,因此,一旦由WorkManager运行,就需要再次将其入队(但是只有当两个对比方法之一为假时才入队是很棘手的)。
更好的方法是结合使用BatteryManager
和ConnectivityManager
。