2011-08-21 105 views
0

我創建了一個應該重複運行並啓動服務的AlarmManager。我的問題是它只運行一次。我無法弄清楚什麼是錯的。現在我已經將AlarmManager的創建附加到按鈕上了。爲什麼我的AlarmManager setRepeating不重複?

這是MenuActivity類的一部分:

private void startUpdateService() { 
    Log.i(TAG, "Registering AlarmManager"); 

    Intent service = new Intent(MenuActivity.this, UpdateService.class); 
    pendingIntent = PendingIntent.getService(MenuActivity.this, 0, service, 0); 

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000, 10*1000, pendingIntent); 

} 

@Override 
public void onClick(View view) { 
    switch(view.getId()) { 
    case R.id.button_calendar: 
     Intent calendarIntent = new Intent(this, CalendarActivity.class); 
     if(Util.isOnline(this)){ 
      startActivity(calendarIntent); 
     }else { 
      Toast.makeText(MenuActivity.this, R.string.toast_is_online, Toast.LENGTH_LONG).show(); 
     } 
     break; 
    case R.id.button_settings: 
     startUpdateService();   
     Toast.makeText(MenuActivity.this, "Startet alarm", Toast.LENGTH_LONG).show();   
     break; 
    } 

} 

初始報警工作正常,但它不會重複。 任何知道我在做什麼錯的人?

+0

我沒有意識到需要停止服務以便再次啓動。感謝您發佈您的調查結果。 =) – Aelexe

回答

1

我從警報中直接看到了幾個運行服務的問題。我也有。我做了什麼,是由廣播接收器取代了服務的啓動服務。你爲什麼不嘗試呢?在Advanced Android中有很好的解釋,版本1可以通過CC許可證獲得。

+1

謝謝。我創建了一個接收器,但遇到同樣的問題。問題在於服務本身不會運行一次以上。接收器應該每隔10秒鐘被調用一次。但是,我在服務中添加了stopSelf(),現在每次都運行該服務。 結論:AlarmManager正在工作,但服務未運行。我不知道我的解決方案是否是最佳實踐,但它是有效的。 – PeddyOfficer

+2

您確定使用正確的服務嗎?也許你想每10秒啓動一次服務,但是android保持活力?這將解釋使用stopSelf()的必要性。我猜你正在使用onCreate()或onStart()來處理服務工作。考慮使用onHandleIntent()來代替。當你解決這個問題時,你可以跳過接收器並返回報警點火服務解決方案。很明顯,服務是這裏的問題,而不是警報,也不是可重複性。 – Moyshe

+0

按照你的建議。現在它工作得很好,不需要停止服務。 謝謝。 – PeddyOfficer