2014-12-02 72 views
2

我知道這是最常見的線程,但我沒有找到任何答案,我的問題。我想在特定時間觸發動態廣播接收機。對於這個我使用下面的代碼鬧鐘管理器沒有正確的時間觸發

public void method1() { 
    br = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context c, Intent i) { 
      doTASK(); 
     } 
    }; 
    registerReceiver(br, new IntentFilter("com.XXXX.wakeup")); 
    pi = PendingIntent.getBroadcast(this, 0, 
      new Intent("com.xxxx.wakeup"), 0); 
    am = (AlarmManager) (this.getSystemService(Context.ALARM_SERVICE)); 

    setAlarmManagerObject(); 
} 

而且setAlarmManagerObject()方法是在這裏

public void setAlarmManagerObject() { 
    Calendar cal = Calendar.getInstance(); 
    int year = cal.get(Calendar.YEAR); 
    int month = cal.get(Calendar.MONTH); 
    int day = cal.get(Calendar.DAY_OF_MONTH); 
    cal.set(year, month, day 
      , com.XXXX.Constants.AlarmHour 
      , com.xxxx.Constants.AlarmMinute 
      , com.xxxx.AlarmSecond); 

    am.setRepeating(AlarmManager.ELAPSED_REALTIME, cal.getTimeInMillis(), 
      AlarmManager.INTERVAL_DAY, pi); 
} 

我的問題是,當我使用它AlarmManager.RTC_WAKEUP時喚醒設備處於關閉狀態。我不希望這個屬性在我的應用程序。所以我用了AlarmManager.ELAPSED_REALTIME,但是ELAPSED_REALTIME報警管理器沒有觸發。我希望我的鬧鐘管理器能夠同時觸發。如果設備處於關閉狀態或睡眠狀態,則設備喚醒後警報管理器也將關閉,它應在準確時間觸發。任何幫助將非常感激。

+0

我也在尋找解決方案,? – DJhon 2014-12-02 07:38:55

+0

我已經回答了一個答案。請檢查。 – maveroid 2014-12-02 07:44:29

+0

ELAPSED_REALTIME:根據自設備啓動以來的時間量觸發掛起的意圖,但不喚醒設備。經過的時間包括設備睡着的任何時間。您可能想嘗試使用RTC代替RTC_WAKEUP。 – 2014-12-02 07:45:43

回答

0

您需要使用這樣的事情: -

alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP (or AlarmManager.ELAPSED_REALTIME), 
SystemClock.elapsedRealtime() + Constants.DELAY_IN_MILLIS, 
pendingIntent); 

可以計算DELAY_IN_MILLIS這是從當前系統時間毫秒的時間延遲。

對於重複報警,你可以有代碼是這樣的: -

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
SystemClock.elapsedRealtime() + Constants.DELAY_IN_MILLIS, 
Constants.ONE_DAY_IN_MILLIS, 
pendingIntent); 
+0

這不適合我。 – XYZ 2014-12-02 10:28:00

+0

你面臨的問題是什麼? – maveroid 2014-12-02 11:52:50