Alarm Manager Example

前端 未结 10 1373
情话喂你
情话喂你 2020-11-21 05:12

I want to implement a schedule function in my project. So I Googled for an Alarm manager program but I can`t find any examples.

Can anyone help me with a basic alar

10条回答
  •  隐瞒了意图╮
    2020-11-21 05:56

    AlarmManager in combination with IntentService

    I think the best pattern for using AlarmManager is its collaboration with an IntentService. The IntentService is triggered by the AlarmManager and it handles the required actions through the receiving intent. This structure has not performance impact like using BroadcastReceiver. I have developed a sample code for this idea in kotlin which is available here:

    MyAlarmManager.kt

    import android.app.AlarmManager
    import android.app.PendingIntent
    import android.content.Context
    import android.content.Intent
    
    object MyAlarmManager {
    
        private var pendingIntent: PendingIntent? = null
    
        fun setAlarm(context: Context, alarmTime: Long, message: String) {
            val alarmManager: AlarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
    
            val intent = Intent(context, MyIntentService::class.java)
            intent.action = MyIntentService.ACTION_SEND_TEST_MESSAGE
            intent.putExtra(MyIntentService.EXTRA_MESSAGE, message)
    
            pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)
            alarmManager.set(AlarmManager.RTC_WAKEUP, alarmTime, pendingIntent)
        }
    
        fun cancelAlarm(context: Context) {
            pendingIntent?.let {
                val alarmManager: AlarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
                alarmManager.cancel(it)
            }
        }
    
    }
    

    MyIntentService.kt

    import android.app.IntentService
    import android.content.Intent
    
    class MyIntentService : IntentService("MyIntentService") {
    
        override fun onHandleIntent(intent: Intent?) {
            intent?.apply {
                when (intent.action) {
                    ACTION_SEND_TEST_MESSAGE -> {
                        val message = getStringExtra(EXTRA_MESSAGE)
                        println(message)
                    }
                }
            }
        }
    
        companion object {
            const val ACTION_SEND_TEST_MESSAGE = "ACTION_SEND_TEST_MESSAGE"
            const val EXTRA_MESSAGE = "EXTRA_MESSAGE"
        }
    
    }
    

    manifest.xml

    
    
    
        
    
        
    
        
    
    
    

    Usage:

    val calendar = Calendar.getInstance()
    calendar.add(Calendar.SECOND, 10)
    MyAlarmManager.setAlarm(applicationContext, calendar.timeInMillis, "Test Message!")
    

    If you want to to cancel the scheduled alarm, try this:

    MyAlarmManager.cancelAlarm(applicationContext)
    

提交回复
热议问题