设备关闭1小时或更长时间后,Alarmmanager不会触发广播接收器

时间:2019-07-02 04:42:05

标签: android kotlin broadcastreceiver alarmmanager android-pendingintent

我正在制作一个闹钟应用程序,该应用程序会在特定时间响铃。我将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()
    }
}

当设备处于唤醒状态时,警报起作用,并发出通知。但是当设备长时间关闭时,有时无法正常工作。

0 个答案:

没有答案