我創建了一項服務,可以在一天中的特定時間和每天(例如上午6點)檢查一些在線數據,而不是使用後臺運行服務和廣播接收器,我決定使用AlarmMananger和下面的代碼:如何讓我的服務在當天的特定時間定期開始
Intent myIntent = new Intent(MainActivity.this, MyAlarmService.class);
pendingIntent = PendingIntent.getService(MainActivity.this, 0, myIntent, 0);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 6);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
我的問題是:
1 - 如何從AlarmManager註銷時,用戶決定取消激活我的服務?
2 - 有什麼用這條線的
calendar.setTimeInMillis(System.currentTimeMillis());
3-會發生什麼,如果我用同樣PARAMS和數據稱爲上面相同的功能,將AlarmMananger覆蓋我的請求,或者將註冊一個新的一個,當時間到了(上午6點)它會打電話給我的服務兩次?
4-是否可以檢查AlarmMananger是否已成功註冊我的意圖?
編輯1:
下面的代碼無法觸發我的廣播接收器,爲什麼?
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 6); // For 6 AM
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
PendingIntent pi = PendingIntent.getService(this, 0, new Intent(this, mybroadcastreceiver.class), PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi);
AndroidManifest.xml中
<receiver
android:name=".mybroadcastreceiver"
android:enabled="true"
android:exported="true"></receiver>
感謝所有這些問題的答案,但這裏有一個問題,我說上面,我在下午6點AlertMananager想每天要打電話給我的接收器的編輯,但是,這並不甚至發生一次,代碼中出了什麼問題?知道我添加了SET_ALARM權限,並且我的接收者沒有被調用相同的結果。 – Jack
您是否將輸入數據保存在任何數據存儲中?如果沒有,然後保存。保存與通話AlarmManager的保存時間和系統時間比較後 –