需求是需要每天定时休眠和唤醒,方案是使用AlarmManager和PendingIntent,实现如下:
/**
* time 每天几点触发
*/
fun sendAlarmEveryday(time: Int, action: String,requestCode:Int) {
val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
val mCalendar = Calendar.getInstance(Locale.getDefault())
mCalendar.timeInMillis = System.currentTimeMillis()
mCalendar.set(Calendar.HOUR_OF_DAY, time)
mCalendar.set(Calendar.MINUTE, 20)
mCalendar.set(Calendar.SECOND, 0)
mCalendar.set(Calendar.MILLISECOND, 0)
val intent = Intent()
// val intent = Intent(QfAdTvApp.app,MyReceiver::class.java)
intent.action = action
val pendingIntent = PendingIntent.getBroadcast(QfAdTvApp.app, requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT)
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, mCalendar.timeInMillis, AlarmManager.INTERVAL_DAY, pendingIntent)//AlarmManager.INTERVAL_DAY
}
实现很简单 就是调用alarmManager的定时重复任务方法,但是运行时却收不到广播,后来把Intent的定义改成val intent = Intent(QfAdTvApp.app,MyReceiver::class.java)才行,action是广播的action。