我想取消在后台设置的所有通知和警报,因为应用被刷卡杀死了。此操作不会触发我的根onDestroy()
内部的Activity
。
我提供了一项后台服务,以致电NotificationManager
并取消后台的所有通知(如果应用被刷卡杀死)。这导致Android O及更高版本中的服务出现一些问题。我发现您必须以其他方式启动服务,但是此服务启动将使我的应用崩溃
错误:Reason: Context.startForegroundService() did not then call Service.startForeground()
我还没有解决方案如何在后台取消我所有的Alarms
,但是此后台服务对于项目后期服务器发出的推送通知非常重要。(无主题)
在Application
类中初始化服务:
private fun initBackgroundService(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(Intent(this, AppService::class.java))
} else {
startService(Intent(this, AppService::class.java))
}
}
AppService
类:
import android.app.NotificationManager
import android.app.Service
import android.content.Context
import android.content.Intent
import android.os.IBinder
class AppService: Service(){
override fun onBind(intent: Intent?): IBinder? {
return null
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
return START_STICKY
}
override fun onTaskRemoved(rootIntent: Intent?) {
super.onTaskRemoved(rootIntent)
val nManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
nManager.cancelAll()
stopSelf()
}
}
答案 0 :(得分:0)
将后台任务保留在变量中,并尝试在“活动”的yourVariable.stop()
方法中调用onStop()
。
class YourClass() {
var myService : Intent? = null
override fun onCreate() {
myService = Intent(this, AppService::class.java)
// do your stuff here
}
override fun onStop() {
myService?.stop() // Or any 'cancel' or 'stop' method in your service
}
}