2013-04-27 59 views
0

正如你建議我使用AlarmManager而不是Timer,我想程序會運行。
但不幸的是,它沒有。或者,更好的,並不總是...AlarmManager不能按預期運行

這是我的代碼:

long millis = 0; 

this.alarmMgr = (AlarmManager)this.main.getSystemService(Context.ALARM_SERVICE); 

this.checkPendingIntent = PendingIntent.getBroadcast(this.main, 0, 
       new Intent(this.main, AlarmReceiver.class), 0); 

if(frequency.compareTo("1HOUR") == 0) 
    millis = 3600 * 1000; 
if(frequency.compareTo("12HOUR") == 0) 
    millis = 12 * 3600 * 1000; 
if(frequency.compareTo("1DAY") == 0) 
    millis = 24 * 3600 * 1000; 
if(frequency.compareTo("1WEEK") == 0) 
    millis = 7 * 24 * 3600 * 1000; 

this.alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, 
     System.currentTimeMillis(), millis, this.checkPendingIntent); 

我期待的是,懸而未決的意圖(AlarmReceiver)都會被調用x毫秒,但事實並非如此。
我可以在手機的日誌中看到它不會被調用,並且在我的服務器日誌中(接收方發送HTTP請求),沒有收到請求。很奇怪的是,有時它運行,但我不能再現這種情況。

有人可以說我做錯了什麼嗎?

非常感謝
盧卡Bertoncello

回答

0

這是怎樣,如果你想每天重複鬧鐘使用報警

Calendar now = Calendar.getInstance(); 
Calendar calendar = Calendar.getInstance(); 
calendar.setTimeInMillis(System.currentTimeMillis()); 
calendar.set(Calendar.HOUR_OF_DAY, yourHour); 
calendar.set(Calendar.MINUTE, yourMin); 
calendar.set(Calendar.SECOND, youSec); 

if (calendar.before(now)) { //if time passed 
    calendar.add(Calendar.DATE,1); 
} 
Intent intent = new Intent(Context.this, DestinationActivity.class); 
PendingIntent pendingIntent = PendingIntent.getActivity 
       (Settings.this,123456, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE); 
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
             AlarmManager.INTERVAL_DAY,pendingIntent); 

使用setRepeating一個簡單的例子。
如果我想知道我使用setAlarm(.. .. .. ..),而不是

+0

謝謝,我會嘗試。你能解釋一下爲什麼你使用setTimeInMillis作爲日曆,然後再使用calendar.set? – 2013-04-27 07:13:30

+0

好吧,它似乎工作...我會測試你的例子今天和明天,期待每小時一個請求。非常感謝 – 2013-04-27 10:32:08

+0

@LucaBertoncello您可以設置鬧鐘,然後更改設置的時間。當警報到來時,警報將被解除。如果您發現我的回答有用,請將它投票並接受爲答案 – 2013-04-28 04:39:05

0

退房這個 -

Intent intentalarm = new Intent("com.mubble.powercutsensorapp.MYTIMER"); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intentalarm, 0); 
    AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    long now = System.currentTimeMillis(); 
    long interval = 24*60 * 60 * 1000; // 24 hour 
    manager.setRepeating(AlarmManager.RTC_WAKEUP, now + interval, interval, 
     pendingIntent);