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

因此,我一直在研究药物摄入应用程序,我需要在本地提醒用户(无需互联网/推送通知)有关服用药物的信息。我正在为此使用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);

    }


`


回首忆惘然
浏览 118回答 2
2回答

叮当猫咪

如果设备处于打ze模式,则不会触发警报。也可以使用setAndAllowWhileIdle或setExactAndAllowWhileIdle在打ze模式下触发警报。来自Android Doc。网络访问已暂停。系统将忽略唤醒锁。标准AlarmManager警报(包括setExact()和setWindow())被推迟到下一个维护窗口。如果您需要设置在打ze时触发的警报,请使用setAndAllowWhileIdle()或setExactAndAllowWhileIdle()。使用setAlarmClock()设置的警报将继续正常触发-在这些警报触发之前,系统会立即退出Doze。系统不执行Wi-Fi扫描。系统不允许运行同步适配器。系统不允许JobScheduler运行。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java