在不使用FCM终止应用程序后是否无法通知?

时间:2020-08-26 10:41:44

标签: android

我想在午夜通知我不使用Firebase。我尝试了很多示例,从alarmmanager,jobdispatcher到workmanager。我意识到自己的局限性。当它处于前台和后台时,通知效果很好。但是,如果我通过单击全部关闭按钮杀死了该应用程序,则调度程序将无法正常工作。请救救我的命...我太生气了。这是我的工作经理示例。

GlobalApplication

open class GlobalApplication : Application() {

    override fun onCreate() {
        super.onCreate()
        instance = this
        var worker = OneTimeWorkRequestBuilder<MyPeriodWorker>()
            .setInitialDelay(1000, TimeUnit.MILLISECONDS).build()

        WorkManager.getInstance(this).enqueue(worker)
    }

    companion object {
        private var instance: GlobalApplication? = null

        val globalApplicationContext: GlobalApplication
            get() {
                checkNotNull(instance) {}
                return instance!!
            }

    }


}

MainActivity

class MainActivity : AppCompatActivity() {

    private lateinit var viewModel: BlurViewModel
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        //var worker = PeriodicWorkRequestBuilder<NotificationWorker>(15,TimeUnit.MINUTES).setInitialDelay(1000,TimeUnit.MILLISECONDS).build()
        var worker = OneTimeWorkRequestBuilder<MyPeriodWorker>()
            .setInitialDelay(1000,TimeUnit.MILLISECONDS).build()

        WorkManager.getInstance(this).enqueue(worker)

    }
}

MyOneTimeWorker

class MyOneTimeWorker(context: Context, params:WorkerParameters):Worker(context,params) {
    override fun doWork(): Result {
        val appContext = applicationContext

        return try{
            makeStatusNotification("WorkManager Alarm",appContext)
            Result.success()
        }
        catch (e:Exception){

            Result.failure()
        }
    }

}

MyPeriodWorker


class MyPeriodWorker(context: Context, params:WorkerParameters): Worker(context,params) {
    override fun doWork(): Result {
        return try{
            val dailyWorkRequeset = OneTimeWorkRequestBuilder<MyPeriodWorker>()
                .setInitialDelay(5000, TimeUnit.MILLISECONDS)
                .addTag("notify_day_by_day")
                .build()
            makeStatusNotification("WorkManager Alarm",applicationContext)

            WorkManager.getInstance(applicationContext).enqueue(dailyWorkRequeset)
            Result.success()
        }
        catch (e:Exception){

            Result.failure()
        }
    }


}

0 个答案:

没有答案
相关问题