2015-06-14 133 views
1

在我的代碼中,setRepeating()方法上的間隔(第三個參數)似乎不是每5秒觸發一次。報警管理器未觸發

它使在時間的增加,這就像第一個或2大多在時間,但其他火災等之後40+secs

那麼,什麼是錯在這裏?

public class MainActivity extends ActionBarActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Intent i = new Intent(this, MainActivity2Activity.class); 
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    PendingIntent pi = PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_CANCEL_CURRENT); 
    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    am.setRepeating(RTC_WAKEUP,System.currentTimeMillis(),1000*5,pi); 
     } 

    } 

回答

1

到這裏看看:http://developer.android.com/reference/android/app/AlarmManager.html#setRepeating(int, long, long, android.app.PendingIntent)

當你射擊報警每5秒:

注意:定時操作(蜱,超時等)更容易和更高效地使用Handler。

您的代碼沒問題。您遇到延遲的說明可能是:

注意:從API 19開始,所有重複警報都是不精確的。如果您的應用程序需要精確的交付時間,那麼它必須使用一次性精確警報,如上所述每次重新安排時間。其targetSdkVersion早於API 19的傳統應用程序將繼續擁有其所有警報,包括重複警報,並將其視爲確切對待。
+0

但我需要的過程中,即使過程被中止 – Flava

+0

對不起運行,但它不可能使這一進程運行時,它的死亡。 – kostek

0

從我從您的代碼中瞭解到,您正試圖在創建MainActivity.class 5秒後運行MainActivity2Activity.class。

我建議您在待定意圖中使用FLAG_UPDATE_CURRENT而不是FLAG_CANCEL_CURRENT。 FLAG_CANCEL_CURRENT會保留您的第一個掛起的意圖,並且不會更新或創建新的,除非您先取消原始未決意圖。 使用FLAG_UPDATE_CURRENT將確保每次執行MainActivity.class時都會更新掛起的intent,以便在創建MainActivity.class 5秒後準確觸發掛起的intent。

希望這會有所幫助。

+0

非常感謝,但我仍然需要在時間上的工作 – Flava

0

基本上你寫PendingIntent.FLAG_CANCEL_CURRENT,而不是PendingIntent.FLAG_ONE_SHOT。通過報警管理

AlarmManager alarmManager = (AlarmManager) getBaseContext().getSystemService(ALARM_SERVICE); 
Intent i1 = new Intent(this, ReceiveAlarmActivity.class); 
i1.putExtra("Key", "Value"); 
PendingIntent operation = PendingIntent.getActivity(getBaseContext(), 0, i1, PendingIntent.FLAG_ONE_SHOT); 
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, Your_Date.getTime(), 5000 operation); 

代碼集報警你必須日期

完成