在Android中,对于Alarm Manager、SystemClock,elapsedRealTIme()可以工作,但alarmStartTime.getTimeInMillis不能';行不通

在Android中,对于Alarm Manager、SystemClock,elapsedRealTIme()可以工作,但alarmStartTime.getTimeInMillis不能';行不通,android,Android,即使没有互联网连接,我也尝试在android中发出日程通知。我尝试了SystemClock,但没有日历。 我的代码是: AlarmManager alarmManager; Intent alarmIntent; PendingIntent pendingIntent; Calendar alarmStartTime = Calendar.getInstance(); alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

即使没有互联网连接,我也尝试在android中发出日程通知。我尝试了SystemClock,但没有日历。 我的代码是:

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点触发一次。我该怎么做呢

注意:从API 19(KITKAT)开始,警报传递是不准确的:操作系统 将切换警报,以尽量减少唤醒和电池使用。那里 是支持需要严格交付的应用程序的新API 担保;请参见设置窗口(int、long、long、pendingent)和 setExact(整型、长型、悬挂型)。应用程序 targetSdkVersion早于API 19,将继续看到 以前的行为,其中所有报警都在 请求


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

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;
}

thx@paudel.sulav投票支持
setInexactRepeating
getInterval