2013-05-14 51 views
2

我已經設置了重複的鬧鐘管理器來啓動獲取位置和發送短信的服務,但是目前我只在文件中寫入時間來檢查鬧鐘的準確度。開始服務,每小時重複並在固定時間間隔獲取信息

我發現鬧鐘管理器工作不正常,我設置了一個小時的時間間隔,但它在30分鐘時被解僱。間隔。我離開了它一天,發現12點鐘後鬧鐘的準確性是正確的。發生了什麼 ??

其啓動

我Activity類報警:

enter code here 

     public static final long ALARM_TRIGGER_AT_TIME = SystemClock.elapsedRealtime() + 20000; 
     public static final long ALARM_INTERVAL = 1000 * 60 * 60 ; 

     AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 

     Intent myIntent = new Intent(AutoMainActivity.this, TrackerService.class); 

     pendingIntent = PendingIntent.getService(AutoMainActivity.this, 0, myIntent, 0); 

     alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,ALARM_TRIGGER_AT_TIME, 1000 * 60 * 60,pendingIntent);  

,我的服務類:

TraceService : 

    public void onStart(Intent intent, int startId) { 
    super.onStart(intent, startId); 

    //writing in file to view time 
    java.util.Date systemDates = Calendar.getInstance().getTime(); 
    simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss"); 
    currentTime = simpleDateFormat.format(systemDates); 

      // create file and write current time 
    generateNoteOnSD("ONSTART"+currentTime+"\n","Onstart.txt"); 

} 

執行這個應用程式在下午3點18分的時間後通過服務創造.The文件顯示報警時間。檢查:

alarm manager time 

ONSTART2013-05-13-15:18:26

ONSTART2013-05-13-15:21:58

ONSTART2013-05-13-15:54: 21

ONSTART2013-05-13-16:18:25

ONSTART2013-05-13-17:18:26

ONSTART2013-05-13-17:49:21

ONSTART2013-05-13-18:18:25

ONSTART2013-05-13-19:18:28

ONSTART2013-05-13-20:10:51

ONSTART2013 -05-13-20:18:29

ONSTART2013-05-13-20:48:49

ONSTART2013-05-13-21:18:30

ONSTART2013-05-13-21:58:58

ONSTART2013-05-13-22:18:38

ONSTART2013-05-13-22:56:00

ONSTART2013-05- 13-23:18:43

ONSTART2013-05-13-23:48:49

ONSTART2013-05-14-00:18:44

ONSTART2013-05-14-01:18 :45

ONSTART2013-05-14-02:18:45

ONSTART2013-05-14-03:18:45

ONSTART2013-05-14-04:18:45

ONSTART2013-05 -14-05:18:44

ONSTART2013-05-14-06:18:44

ONSTART2013-05-14-07:18:44

您可以檢查,當警報管理器啓動在15:1 8點,30分鐘後再次開始。約。但12點鐘後它工作正常!如何解決它。我不需要在那之前每隔一小時就開始一次鬧鐘。

+0

你確定報警設置代碼只調用一次嗎? 'alarmManager.setRepeating ...' – 2013-05-14 05:46:42

+0

我打電話給鬧鐘管理員一次,它正在重複鬧鐘,但時間不固定。 – 2013-05-14 06:08:38

回答

1

嘗試用AlarmManager.RTC_WAKEUP一次,而不是AlarmManager.ELAPSED_REALTIME_WAKEUP 中有這樣一個例子:爲什麼每個人都變得複雜這一問題,所以Alarm Manager Example

+0

好吧,我必須檢查一下 – 2013-05-14 06:06:02

+0

我在更改爲RTC_WAKEUP後得到了這個結果:1)。首先在09:57:12 2)。在09:58:03 3)。在10:28:27 4)。在11:28:27第一次觸發警報工作正常。我仍在等待更多結果。 – 2013-05-14 06:40:38

0

我懷疑你有多個待處理的報警。我建議你在設置這個之前清除所有的警報。

public void onStart(Intent intent, int startId) { 
    super.onStart(intent, startId); 

    // Cancel alarms 
    try { 
     alarmManager.cancel(intent); 
    } catch (Exception e) { 
     Log.e(TAG, "AlarmManager update was not canceled. " + e.toString()); 
    } 
} 

(如何取消警報在this answer回答得很好)

0

不知道許多。我到處看到它。關於計算下一小時的答案和答案。

絕對沒有需要計算什麼。來自Calender的HOUR並將其用作間隔。 HOUR每小時更改一次。這就是它的全部。

某些設備可能需要稍微調整以確保被調用的HOUR連續不同。這是由於一些設備調用HOUR有時當微小的變化。

相關問題