我目前正在开发一个 Android 应用程序,该应用程序可以设置在特定时间触发的闹钟。我已经实现了设置闹钟的代码,并且设置似乎没有任何错误,这可以在 和闹钟选项卡中看到。
但是,闹钟不会在指定时间触发,因此,没有播放任何通知、声音或 setAlarmClock 中引用的任何其他操作(除了正在正确启动的挂起意图之外)。
这是我用来设置闹钟的代码的简化版本:
val intent = Intent(context, AlarmClockReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(context, reqCode, intent, PendingIntent.FLAG_IMMUTABLE)
val alarmManager: AlarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
val calendar: Calendar = Calendar.getInstance().apply {
timeInMillis = System.currentTimeMillis()
set(Calendar.HOUR_OF_DAY, desiredHour)
set(Calendar.MINUTE, desiredMinute)
val calendarMillis = calendar.timeInMillis
alarmManager.setAlarmClock(AlarmManager.AlarmClockInfo(calendarMillis, pendingIntent), pendingIntent)
我已检查是否可以设置准确的警报,并且我已定义并请求以下权限:
<uses-permission android:name="android.permission.USE_EXACT_ALARM"/>
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
我有类似的问题,我有检查清单给你)
set(Calendar.SECONDS, 0)
,因为设置闹钟时它可以在0..59范围内。pendingIntent
更改为
val pendingIntent = PendingIntent.getBroadcast(context, reqCode, intent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT)
P.S 你可以用闹钟检查我的项目https://github.com/hicosmonaut/hourly/tree/master没什么特别的,应用程序每小时闹钟一次,就像卡西欧手表每小时闹钟一样。也许你会发现一些对你有用的东西,比如 PendingIntent、AlarmClock 等