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在電話處於睡眠模式時不會廣播意圖?
我的經驗到目前爲止,在多個設備上轉載,是意向將在我的設備處於睡眠模式(我的應用程序在白天不斷運行)的第一個晚上播出,但從未播出過意圖再次晚上。
任何想法?
我一定會嘗試更換,而是你能否詳細說明了一點,解釋爲什麼這可能是問題的根源? – JAC
請參閱http://developer.android.com/reference/android/os/SystemClock.html – Saj
我不應該將類型更改爲'AlarmManager.ELAPSED_REALTIME_WAKEUP'而不是使用'AlarmManager.RTC_WAKEUP'? – JAC