2011-11-04 43 views
2

我使用這個代碼(從我的活動),以啓動應用程序週期定時器:我如何知道我的鬧鐘管理器計時器是否打開?

Intent intent = new Intent(this, MyBroadcastReceiver.class); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, 0); 
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),(i * 1000), pendingIntent); 
Toast.makeText(this, "Alarm set in " + i + " seconds", 
Toast.LENGTH_SHORT).show(); 

我想知道我怎麼能知道(從不同的活動)的定時器運行?

回答

2

我能想到的一種可能性是檢查是否定義了待定Intent。

您可以撥打

PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, PendingIntent.FLAG_NO_CREATE); 

這會給你如果不指定意圖是待處理的意圖,或者爲null。這並不能保證設置了警報,但它是一種簡單的方法來檢查設置的警報代碼是否以前被調用過。

另一種可能是將所有設置的警報保存在SharedPreferences文件中。通過這種方式,您可以在共享prefs文件中查找您的應用程序設置的所有警報。

至於我可以看到有沒有辦法讓一組報警列表中停止功能您從AlarmManager

+0

嗨,它不適合我,我總是從我開始的時候獲得價值(不爲空)。 b.t.w以停止定時器我使用:\t \t \t //準備意圖 \t \t \t意圖意圖=新意圖(此, \t \t \t \t \t LocaitonSampleBroadcaseReceiver.class); \t \t \t的PendingIntent的PendingIntent = PendingIntent.getBroadcast( \t \t \t \t \t this.getApplicationContext(),234324243,意圖,0); \t \t \t //停止計時器 \t \t \t AlarmManager alarmManager =(AlarmManager)getSystemService(ALARM_SERVICE); \t \t \t alarmManager.cancel(pendingIntent); – user733284

+0

這是正確的PendingIntent將被存儲,直到您調用掛起的意圖取消。這是與方法的問題,你只能檢查意圖是否存在,而不是在警報管理器註冊 – Janusz

0

應用

Intent intent = new Intent(this, LocaitonSampleBroadcaseReceiver.class); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, 0); 
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); alarmManager.cancel(pendingIntent); 

只補充一點:

pendingIntent.cancel(); 

所以你可以使用字符串寫評論Janusz

PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent, PendingIntent.FLAG_NO_CREATE);