为了账号安全,请及时绑定邮箱和手机立即绑定

Android Alarm Manager不适用于特定的日期和时间

Android Alarm Manager不适用于特定的日期和时间

回首忆惘然 2021-05-12 14:11:43
因此,我一直在研究药物摄入应用程序,我需要在本地提醒用户(无需互联网/推送通知)有关服用药物的信息。我正在为此使用Android警报管理器。下面是代码注释:我正在尝试为特定日期安排警报:“ 2018年7月13日,下午3点30分”。我安排并等待,但是提醒未触发(因此未广播),但是如果我使用AlarmManager.ELAPSED_REALTIME_WAKEUP并定义了毫秒数,则会触发(但AlarmManager.RTC_WAKEUP却不起作用)    AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);    Intent myIntent;    PendingIntent pendingIntent;    long reminderDateTimeInMilliseconds = 000;    myIntent = new Intent(this,MedicationScheduleBroadCastReceiver.class);    pendingIntent = PendingIntent.getBroadcast(this,0,myIntent,PendingIntent.FLAG_UPDATE_CURRENT);    //TODO : Reminder the user to take medication on the 13th July 2018 at 15:30    Calendar calendarToSchedule = Calendar.getInstance();    calendarToSchedule.set(Calendar.YEAR, 2018);    calendarToSchedule.set(Calendar.MONTH, 07);    calendarToSchedule.set(Calendar.DAY_OF_MONTH, 13);    calendarToSchedule.set(Calendar.HOUR_OF_DAY, 15);    calendarToSchedule.set(Calendar.MINUTE, 30);    reminderDateTimeInMilliseconds = calendarToSchedule.getTimeInMillis();    if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O){        manager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, reminderDateTimeInMilliseconds, pendingIntent);    }    else{        manager.set(AlarmManager.RTC_WAKEUP, reminderDateTimeInMilliseconds, pendingIntent);    }`
查看完整描述

2 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

如果设备处于打ze模式,则不会触发警报。也可以使用setAndAllowWhileIdlesetExactAndAllowWhileIdle在打ze模式下触发警报。

来自Android Doc

  • 网络访问已暂停。

  • 系统将忽略唤醒锁。

  • 标准AlarmManager警报(包括setExact()setWindow())被推迟到下一个维护窗口。如果您需要设置在打ze时触发的警报,请使用setAndAllowWhileIdle()setExactAndAllowWhileIdle()

  • 使用setAlarmClock()设置的警报将继续正常触发-在这些警报触发之前,系统会立即退出Doze。

  • 系统不执行Wi-Fi扫描。

  • 系统不允许运行同步适配器。系统不允许JobScheduler运行。


查看完整回答
反对 回复 2021-05-26
  • 2 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信