Как остановить все уведомления и тревоги, если приложение было убрано при смахивании? - PullRequest
0 голосов
/ 02 июля 2019

Я хочу отменить все мои уведомления и сигналы тревоги, установленные в фоновом режиме, так как приложение удаляется при смахивании.Это действие не вызовет onDestroy() внутри моего корня Activity.

Я сделал фоновый сервис для вызова NotificationManager и отменил все уведомления в фоновом режиме, если приложение было убито смахиванием.Это вызвало некоторые проблемы со службой в Android O и выше.Я обнаружил, что вы должны запустить свой сервис по-другому, но этот запуск сервиса приведет к сбою моего приложения с ошибкой: Reason: Context.startForegroundService() did not then call Service.startForeground()

У меня нет решения, как отменить все мои Alarms в фоновом режиме,но эта фоновая служба очень важна для push-уведомлений с сервера позже в проекте. (offtopic)

Инициализация службы в моем 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()
        }

    }

1 Ответ

0 голосов
/ 03 июля 2019

Сохраните фоновое задание в переменной и попробуйте вызвать 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
    }
}
...