2013-11-21 33 views
1

我有一個非常簡單的類,設置和取消的AlarmManager廣播意圖:當設備處於睡眠模式時,AlarmManager.setInexactRepeating是否可以廣播意圖?

public class MyIntentsAlarm { 

public void setAlarm(Context context){ 
    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    Intent i = new Intent("MY_ACTION"); 
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 
    am.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),5*60*1000L, pi); 
} 

public void cancelAlarm(Context context){ 
    Intent intent = new Intent("MY_ACTION"); 
    PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0); 
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    alarmManager.cancel(sender); 
} 
} 

我打電話在我的活動的onCreate()方法setAlarm(Context context)方法,並在onDestroy()cancelAlarm(Context context)。然後在我的活動的onCreate()方法我註冊一個BroadcastReceiver來聽這個AlarmManager廣播的意圖和執行一些任務(在獲取喚醒鎖來保證任務執行):

myActionAlarmReceiver = new BroadcastReceiver() { 
@Override 
public void onReceive(Context context, Intent intent) { 
    Log.d(TAG, "MY_ACTION intent received"); 
    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, ""); 
    wl.acquire(); 
    runMyTask(); 
    wl.release(); 
} 
}; 
registerReceiver(myActionAlarmReceiver, new IntentFilter("MY_ACTION")); 

是否有可能即使我使用RTC_WAKEUP類型,並且我在我的BroadcastReceiver中獲得了WakeLock,我的AlarmManager在電話處於睡眠模式時不會廣播意圖?

我的經驗到目前爲止,在多個設備上轉載,是意向將在我的設備處於睡眠模式(我的應用程序在白天不斷運行)的第一個晚上播出,但從未播出過意圖再次晚上。

任何想法?

回答

2

試試這個

 SystemClock.elapsedRealtime() 

System.currentTimeMillis() 
+0

我一定會嘗試更換,而是你能否詳細說明了一點,解釋爲什麼這可能是問題的根源? – JAC

+0

請參閱http://developer.android.com/reference/android/os/SystemClock.html – Saj

+0

我不應該將類型更改爲'AlarmManager.ELAPSED_REALTIME_WAKEUP'而不是使用'AlarmManager.RTC_WAKEUP'? – JAC

相關問題