Kotlin:类型不匹配:推断类型为 String 但预期为 Context -(kotlin 中的通知通道 - class 特定错误)

Kotlin: Type mismatch: inferred type is String but Context was expected -(notification channel in kotlin-class specific error)

我正在制作一个需要使用工作管理器来发出通知的应用程序,我知道如何在 activity 中发出通知,但将它们写在 do work 中的单独的 kotlin 文件中方法如下:

class NotificationWorkManager(appContext: Context, workerParams: WorkerParameters):
    Worker(appContext, workerParams) {

    //notification variables
    val CHANNEL_ID = "channel_ID"
    val CHANNEL_NAME = "channel_NAME"
    val NOTIFICATION_ID = 0

    override fun doWork(): Result {


        triggerNotify()
        return Result.success()
    }

    fun triggerNotify(){
        createNotificationChannel()
        //big picture:notification
        val notiStyle = NotificationCompat.BigPictureStyle()
        var remote_picture = BitmapFactory.decodeResource(applicationContext.resources, R.drawable.make_new)
        notiStyle.bigPicture(remote_picture)

//open the app from outside the app
            val intent = Intent(applicationContext, MainActivity::class.java)
            val pendingIntent = TaskStackBuilder.create(applicationContext).run{
                addNextIntentWithParentStack(intent)
                getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT)
            }
    
//main notification variable
            val notification= NotificationCompat.Builder(applicationContext,CHANNEL_ID)
                .setContentTitle("Workmg")
                .setContentText("basdasdadfhgafgsgsfg")
                .setSmallIcon(R.drawable.ic_bb)
                .setPriority(NotificationCompat.PRIORITY_HIGH)
                .setColor(Color.RED)
                .setStyle(notiStyle)
                .setProgress(100,10,true)//true keeps scroller running
                .setLargeIcon(BitmapFactory.decodeResource(applicationContext.resources, R.drawable.make_new))
                .setContentIntent(pendingIntent)
                .build()
    
            val notificationManager = NotificationManagerCompat.from(applicationContext)
            notificationManager.notify(NOTIFICATION_ID,notification)
        }

    
        fun createNotificationChannel(){
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
                val channel= NotificationChannel( CHANNEL_ID,CHANNEL_NAME,
                    NotificationManager.IMPORTANCE_HIGH).apply {
                    lightColor= Color.RED
                    enableLights(true)
                }
                val manager= getSystemService(NOTIFICATION_SERVICE) as NotificationManager
                manager.createNotificationChannel(channel)
            }
        }
    }

我的错误出现在最后几行,其中声明了 manager 变量以及下面的红色波浪线 NOTIFICATION_SERVICE ::

Type mismatch: inferred type is String but Context was expected

如果代码直接写在 Main Activity 中,我不会在这种情况下这样做,因为我想在 Work Manager.

中使用它

我尝试使用 Context.NOTIFICATION_SERVICE 但仍然出现相同的错误。

请帮忙...

要获取系统服务,我们通常需要Context对象和某种服务标识符(例如String)。当我们从Activity(或例如Service)获取系统服务时,我们只需要提供一个标识符,因为Activity本身就是一个Context对象,所以Context 已经知道了。在这种情况下,我们使用 Context.getSystemService() 函数。

在您的情况下,您不在 Context 范围内,所以我不确定您使用的 getSystemService() 函数是什么。也许您导入了一个静态函数:ContextCompat.getSystemService()。在这种情况下,正如您在文档中看到的那样,您需要同时提供 Context 和服务标识符。

但无论如何,工作人员可以使用 applicationContext 属性 访问上下文,因此您应该能够使用

获取系统服务
val manager= applicationContext.getSystemService(NOTIFICATION_SERVICE) as NotificationManager