#闹钟设置后不回调
调用界面
class AlarmClockActivity : BaseActivity() {
override fun getLayoutResId(): Int {
return R.layout.act_alarm_clock
}
override fun initActivity() {
setAlarm( this)
}
// TODO: 2025/12/2 16:03 -(Administrator)-{🎉 内部调用}
fun setAlarm(context: Context) {
val alarmMgr = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
// 检查并请求精确闹钟权限 (Android 12+)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
if (!alarmMgr.canScheduleExactAlarms()) {
// 跳转到权限请求页面
val intent = Intent(ACTION_REQUEST_SCHEDULE_EXACT_ALARM)
startActivity(intent)
return
}
}
val calendar: Calendar = Calendar.getInstance().apply {
timeInMillis = System.currentTimeMillis()
set(Calendar.HOUR_OF_DAY, 18)
set(Calendar.MINUTE, 1)
}
// 确保闹钟设置在未来时间
if (calendar.timeInMillis <= System.currentTimeMillis()) {
calendar.add(Calendar.DAY_OF_YEAR, 1)
}
val pendingIntent = Intent(context, AlarmReceiver::class.java).let { intent ->
PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)
}
// 根据Android版本选择正确的方法
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmMgr.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.timeInMillis, pendingIntent)
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmMgr.setExact(AlarmManager.RTC_WAKEUP, calendar.timeInMillis, pendingIntent)
} else {
alarmMgr.set(AlarmManager.RTC_WAKEUP, calendar.timeInMillis, pendingIntent)
}
}
// TODO: 2025/12/2 16:13 -(Administrator)-{🎉 全局调用}
companion object{
fun startActivity(context: Context){
val intent = Intent(context, AlarmClockActivity::class.java)
context.startActivity(intent)
}
}
}
回调界面
class AlarmReceiver : BroadcastReceiver(){
override fun onReceive(context: Context?, intent: Intent?) {
Toast.makeText(context, "闹钟响了!", Toast.LENGTH_LONG).show()
}
}