android 无法启动服务lateinit属性尚未初始化

von4xj4u  于 2022-12-28  发布在  Android
关注(0)|答案(1)|浏览(199)

嗨,谢谢你的专业知识。
我正在尝试运行一个服务,它将显示一个通知,并在一段时间后检查它是否仍然存在或用户已摆脱它。
因此,在MainActivity.kt中,当onPause函数被触发时,我启动服务,如下所示

startService(Intent(this,NewService::class.java))

然后在NewService.kt中,我想使用MainActivity.kt函数checkNotifications()检查是否显示了通知

class NewService:Service() {
    
    @RequiresApi(Build.VERSION_CODES.M)
    override fun onStartCommand(init : Intent, flag : Int, startId: Int):Int{
        MainActivity().checkNotifications()
        return  START_STICKY
    }

    override fun onDestroy() {
        super.onDestroy()
    }

    override fun onBind(p0: Intent?): IBinder? {
        return null
    }

}

MainActivity.kt中的checkNotifications()函数如下所示

@RequiresApi(Build.VERSION_CODES.M)
    fun checkNotifications(){
        val notifications: Array<StatusBarNotification> = notificationManager.activeNotifications

        if(notifications.isNotEmpty())
        {
            println("Notification exists")
        }
        else
        {
            println("No notifications")
        }
    }

因此,只要我不调用checkNotifications(),我的应用就可以"正常"工作。我的意思是服务启动等等。但是,当我尝试调用checkNotifications()时,我得到了这个错误
java.lang.RuntimeException: Unable to start service abc.com.app.NewService@b380e9f with Intent { cmp=abc.com.app/.NewService }: kotlin.UninitializedPropertyAccessException: lateinit property notificationManager has not been initialized
notificationManager属性在onCreate()函数中初始化,在我调用checkNotifications()之前,一切都在正常运行
有没有人能好心告诉我我做错了什么?
谢谢

im9ewurl

im9ewurl1#

MainActivity().checkNotifications()

永远不要自己创建Activity的示例。将checkNotifications()移动到服务或某个实用程序类中(在那里,您提供Context作为checkNotifications()的参数,以获得NotificationManager)。

相关问题