在Android中,对于Alarm Manager,SystemClock,elapsedRealTIme()有效但alarmStartTime.getTimeInMillis不起作用

时间:2016-01-09 13:52:21

标签: android

即使没有互联网连接,我也试图在Android中制作日程安排通知。我试过SystemClock而不是Calendar,但是没有。 我的代码是:

AlarmManager alarmManager;
Intent alarmIntent;
PendingIntent pendingIntent;
Calendar alarmStartTime = Calendar.getInstance();

alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmIntent = new Intent(Splash.this, AlarmReceiver.class);
    pendingIntent = PendingIntent.getBroadcast(Splash.this, 0, alarmIntent, 0);

    alarmStartTime.set(Calendar.HOUR_OF_DAY, 11);
    alarmStartTime.set(Calendar.MINUTE, 32);
    alarmStartTime.set(Calendar.SECOND, 0);

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, alarmStartTime.getTimeInMillis(), 30 * 1000, pendingIntent);

这不起作用。但以下一行工作正常。它每30秒触发一次。

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 30 * 1000, pendingIntent);

我希望我的应用每隔8:00触发一次。我怎么能这样做。

2 个答案:

答案 0 :(得分:0)

  

注意:从API 19(KITKAT)开始,警报传递是不准确的:操作系统   将移动警报以最小化唤醒和电池使用。那里   是支持需要严格交付的应用程序的新API   担保;请参阅setWindow(int,long,long,PendingIntent)和   setExact(int,long,PendingIntent)。应用程序   targetSdkVersion早于API 19将继续看到   以前的行为,其中所有警报都在何时传递   请求。

https://developer.android.com/reference/android/app/AlarmManager.html

答案 1 :(得分:0)

我解决了这个问题。在日历中设置第二个时,我们必须使用两位数字。我使用以下代码解决了这个问题。

alarmStartTime.set(Calendar.HOUR_OF_DAY, 08);
    alarmStartTime.set(Calendar.MINUTE, 00);
    alarmStartTime.set(Calendar.SECOND, 00);

并且在调用时使用了像:

alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, alarmStartTime.getTimeInMillis(), getInterval(), pendingIntent);

并设置一天的间隔方法,以便它始终在上午8点醒来。

  private int getInterval(){
    int days = 1;
    int hours = 24;
    int minutes = 60;
    int seconds = 60;
    int milliseconds = 1000;
    int repeatMS = days * hours * minutes * seconds * milliseconds;
    return repeatMS;
}