我想安排一个工作人员在设备插入并连接到互联网时显示通知

时间:2018-10-29 13:28:49

标签: android notifications android-notifications job-scheduling android-workmanager

好的,我认为标题是不言自明的...我必须使用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,因为那不是应用程序应该工作的方式。有人可以在这里建议一种方法吗?谢谢

1 个答案:

答案 0 :(得分:0)

在这种情况下,我认为WorkManager不是最佳选择。

在特定情况下,您使用的是OneTimeWorkRequest,因此,一旦由WorkManager运行,就需要再次将其入队(但是只有当两个对比方法之一为假时才入队是很棘手的)。

更好的方法是结合使用BatteryManagerConnectivityManager