具有前台服务的 Android Worker 不显示通知

问题描述 投票:0回答:2

我正在按照此文档创建一个运行前台服务的长期工作人员,但没有显示任何通知。

工人运行,我看到日志。

代码:

override suspend fun doWork(): Result {
    Log.d(TAG, "Worker start")
    setForeground(createForegroundInfo("Hello from my notification"))
    Log.d(TAG, "Worker end")
    return Result.success()
}

private fun createForegroundInfo(progress: String): ForegroundInfo {
    val channelId = applicationContext.getString(R.string.notification_channel_id)
    val title = applicationContext.getString(R.string.notification_title)
    // This PendingIntent can be used to cancel the worker
    val intent = WorkManager.getInstance(applicationContext)
        .createCancelPendingIntent(getId())

    // Create a Notification channel if necessary
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        createChannel()
    }

    val notification = NotificationCompat.Builder(applicationContext, channelId)
        .setContentTitle(title)
        .setTicker(title)
        .setContentText(progress)
        .setSmallIcon(R.drawable.ic_notifications_black_24dp)
        .setOngoing(true)
        .build()

    return ForegroundInfo(1, notification)
}

@RequiresApi(Build.VERSION_CODES.O)
private fun createChannel() {
    // Create the NotificationChannel, but only on API 26+ because
    // the NotificationChannel class is new and not in the support library
    val name = applicationContext.getString(R.string.notification_channel_name)
    val descriptionText = applicationContext.getString(R.string.notification_channel_description)
    val importance = NotificationManager.IMPORTANCE_DEFAULT
    val channelId = applicationContext.getString(R.string.notification_channel_id)
    val channel = NotificationChannel(channelId, name, importance).apply {
        description = descriptionText
    }
    // Register the channel with the system
    val notificationManager: NotificationManager = applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
    notificationManager.createNotificationChannel(channel)
}
android android-notifications android-workmanager
2个回答
2
投票

问题在于

doWork
功能持续时间太短,不足以看到通知。


0
投票

当您为 getForegroundInfo() 创建通知时添加 .setForegroundServiceBehavior(FOREGROUND_SERVICE_IMMEDIATE) 用于NotificationCompat.Builder,您的通知将立即显示

© www.soinside.com 2019 - 2024. All rights reserved.