TL; DR - AlarmManager .setRepeating基本上我開始警報管理器立即啓動,而所期望的未來時間..(從例如5分鐘現在)的Android重複報警管理器襯托立即
所以我給它剩下的時間來操作,由於某種原因,它會立即發射..用戶正在從時間選擇器中選擇一個時間,並且我將這個時間設置爲下一個鬧鐘。 代碼如下:
- 此方法得到的時間,直到報警,這是用作爲alarmManager的triggerInMillis。
/** calculate the time left until the alarm with calendar */
private static long getTimeFromCalendar(final int hourOfDay, final int minute) {
Date dat = new Date();//initializes to now
Calendar cal_alarm = Calendar.getInstance();
Calendar cal_now = Calendar.getInstance();
cal_now.setTime(dat);
cal_alarm.setTime(dat);
cal_alarm.set(Calendar.HOUR_OF_DAY,hourOfDay);
cal_alarm.set(Calendar.MINUTE, minute);
cal_alarm.set(Calendar.SECOND,0);
if(cal_alarm.before(cal_now)){
cal_alarm.add(Calendar.DATE,1);
}
long calAlarm = cal_alarm.getTimeInMillis();
long calNow = cal_now.getTimeInMillis();
long timeLeft = (calAlarm - calNow);
return timeLeft;
}
然後我稱之爲-startAlarm-方法:
private static void startAlarm(final Enums typeToStart) {
final PendingIntent pendingIntent = GBAlarms.createPendingIntent(OnAlarmReceiver.class, Constants.typeEnum, typeToStart);
final long timeToAlarm = Utils.getTimeToAlarm(typeToStart);
long repeatTime = Constants._24hours;
GBAlarms.createRepeatingAlarm(timeToAlarm, repeatTime, pendingIntent);
}
最後,我-GBAlarms.class-在那裏我創造我報警和未決意圖。
public class GBAlarms {
/** Define our AlarmManager */
private static AlarmManager mgr = (AlarmManager) BaseApplication.getAppContext().getSystemService(Context.ALARM_SERVICE);
/** Create a new PendingIntent */
public static PendingIntent createPendingIntent(final Class destination, @Nullable final String extra, Enums.TeaType type) {
Intent i = new Intent(BaseApplication.getAppContext(), destination);
if (extra != null && type != null) { i.putExtra(extra, type); }
PendingIntent pi = PendingIntent.getBroadcast(BaseApplication.getAppContext(), type.getValue() , i, 0);
return pi;
}
/** Create a new repeating Alarm */
public static void createRepeatingAlarm(final long time, final long repeatTime, final PendingIntent pi) {
mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, time, repeatTime, pi);
}
}
我不明白,出於某種原因,當我在-createRepeatingAlarm-方法對其進行設置,我當然調試的報警權彈出,時間參數看起來合法的..如果我將它設置爲3分鐘,10分鐘,它把那個時間留在觸發器..
任何人都可以發現我的錯誤?也許我錯過了什麼?
非常感謝您的幫助。
會像這樣:mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,SystemClock.elapsedRealtime()+ repeatTime,repeatTime,pi)更好嗎? –