我正在制作一个闹钟应用程序,该应用程序会在特定时间响铃。我将AlarmManger与BroadcastReceiver一起使用。但是,当设备处于睡眠模式时,有时无法使用。但是在设备开启和使用时效果很好。虽然我在触发警报并使用带有AlarmManager的RTC_WAKEUP之前获取了唤醒锁,但没有任何帮助。请在下面检查我的代码:
AndroidManifest.xml中的权限
<uses-permission android:name="android.permission.WAKE_LOCK"/>
在AndroidManifest.xml中注册的接收器
<receiver android:name="com.packagename.receiver.AzanAlarm"/>
我用来设置闹钟的功能
fun setAzan(context: Context, reqCode: Int, offset: Long, pendingIntent: PendingIntent) {
if (offset > 0) {
val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + offset, pendingIntent)
}
else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + offset, pendingIntent)
}
else {
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + offset, pendingIntent)
}
}
}
这是我的广播接收器代码
class AzanAlarm: BroadcastReceiver(){
override fun onReceive(context: Context, intent: Intent) {
val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager
val wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyAppName:Azan")
wakeLock!!.acquire(30000) // timout after 30 seconds to play comp. azan
showAzanNotification()
}
}
当设备处于唤醒状态时,警报起作用,并发出通知。但是当设备长时间关闭时,有时无法正常工作。