嗨,谢谢你的专业知识。
我正在尝试运行一个服务,它将显示一个通知,并在一段时间后检查它是否仍然存在或用户已摆脱它。
因此,在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()之前,一切都在正常运行
有没有人能好心告诉我我做错了什么?
谢谢
1条答案
按热度按时间im9ewurl1#
永远不要自己创建Activity的示例。将
checkNotifications()
移动到服务或某个实用程序类中(在那里,您提供Context
作为checkNotifications()
的参数,以获得NotificationManager
)。