我正在實施AlarmManager來爲我的應用程序請求更新,每天只發生一次。我不希望鬧鐘一旦產生,鬧鐘就會關閉。爲此,我創建了一個日曆對象。爲什麼我的下面的實現是在警報不應該熄滅的時候觸發警報?
無論何時創建警報,它也會觸發。請注意,這並不總是發生。
我注意到這個問題只發生在一天中的某個時間。我住在香港,希望沒有任何問題,因爲我的時區。而不是使用AlarmManager.INTERVAL_DAY,我也嘗試使用24 * 60 * 60 * 1000。
只有在日曆紙廠比當前紙廠老時纔會發生這種情況。我將檢查當前時間是否較新,並在刪除此問題之前在日曆對象中添加24 * 60 * 60 * 1000。
這是一個創建AlarmManager的服務。此服務也將在啓動時啓動。只是爲了確保dataPreferenceObj,它是我的應用程序中DataPreference類的一個實例,它處理與我的應用程序相關的SharedPreferences調用。 ACTION_SCHEDULE_ALARM是Keys ENUM類的一部分,它包含所有字符串常量。
public class TukiService extends Service {
private static AlarmManager calendarAlarmManager;
private static PendingIntent calendarPendingIntent;
private static final int SCHEDULE_REQUEST_CODE = 1001;
@Override
public void onCreate() {
super.onCreate();
updateScheduleUpdate();
}
private static void updateScheduleUpdate() {
if (dataPreferenceObj.getEnabledUpdate() == true) {
cancelScheduleUpdate();
requestScheduleUpdate();
} else if (dataPreferenceObj.getEnabledUpdate() == false) {
cancelScheduleUpdate();
}
}
private static void requestScheduleUpdate() {
setScheduleAlarmParamaters();
Calendar calendar = new GregorianCalendar();
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
scheduleAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY,
schedulePendingIntent);
}
/*
* Cancels an existing alarm if user doesn't want to auto update.
*/
private static void cancelScheduleUpdate() {
setScheduleAlarmParamaters();
scheduleAlarmManager.cancel(schedulePendingIntent);
}
private static void setScheduleAlarmParamaters() {
Intent intent = new Intent(Keys.ACTION_SCHEDULE_ALARM.toString(),
Uri.parse(Long.toString(SCHEDULE_REQUEST_CODE)), context,
AlarmReceiver.class);
schedulePendingIntent = PendingIntent.getBroadcast(mContext,
SCHEDULE_REQUEST_CODE, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
scheduleAlarmManager = (AlarmManager) mContext
.getSystemService(Context.ALARM_SERVICE);
}
}
這裏是接收廣播的廣播接收器:
public class ScheduleReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Keys.ACTION_SCHEDULE_ALARM.toString())) {
if (TukiService.SCHEDULE_REQUEST_CODE == Long.parseLong(intent
.getData().getSchemeSpecificPart())) {
new NetworkHandler(context).fetchAutoEnabledUpdate();
}
}
}
}
這裏是在mainfest我的接收機聲明:
<uses-permission android:name="android.permission.WAKE_LOCK" />
<receiver
android:name="com.milanix.tuki.service.ScheduleReceiver"
android:enabled="true" >
</receiver>
<service android:name="com.milanix.tuki.service.TukiService" >
</service>
到目前爲止,它對我來說工作得很好。 – 2016-05-08 08:43:57