AlarmManager 可以設置固定時間,固定週期性的操作
120秒後每60秒調用一次UpdateService:
private void setAlarmTime(){
Slog.i("TEST", "Start self-define alarm");
currentSystemTime = System.currentTimeMillis();
try {
nextCheckAlarmTime = Long.parseLong(Settings.System.getString(mSystemContext.getContentResolver(), Settings.System.KEY_NEXT_CHECK_TIME));
}catch (Exception e){
e.printStackTrace();
}
manager = (AlarmManager) mSystemContext.getSystemService(ALARM_SERVICE);
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.android.settings","com.android.settings.system.UpdateService"));
pi = PendingIntent.getService(mSystemContext,0,intent,0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
if (nextCheckAlarmTime - currentSystemTime > 0) {
manager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 120 * 1000 + SystemClock.elapsedRealtime(), 600 * 1000, pi);
} else {
Intent intentSerive = new Intent();
intentSerive.setComponent(new ComponentName("com.android.settings", "com.android.settings.system.UpdateService"));
mSystemContext.startService(intentSerive);
setAlarmChange();
}
Slog.i("TEST", "End self-define alarm");
}
}
每天(或是週期性)固定的時間進行調用UpdateService的操作:
private void setAlarmChange(){
Slog.i(TAG, "Start self-define alarm");
manager = (AlarmManager) mSystemContext.getSystemService(ALARM_SERVICE);
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.android.settings","com.android.settings.system.UpdateService"));
pi = PendingIntent.getService(mSystemContext,0,intent,0);
timedate = Settings.System.getString(mSystemContext.getContentResolver(),Settings.System.KEY_CHECK_TIME_VALUE);
dayset = Integer.parseInt(Settings.System.getString(mSystemContext.getContentResolver(), Settings.System.KEY_UPDATE_INTERVAL))+1;
temptimedate = timedate.split(":");
hourset = temptimedate[0];
mintuesset = temptimedate[1];
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(hourset));
calendar.set(Calendar.MINUTE, Integer.parseInt(mintuesset));
calendar.add(Calendar.DATE,dayset);
nextCheckAlarmTime = calendar.getTimeInMillis()+dayset*3600*24*1000;
Settings.System.putString(mSystemContext.getContentResolver(),Settings.System.KEY_NEXT_CHECK_TIME,String.valueOf(nextCheckAlarmTime));
// setRepeating() lets you specify a precise custom interval--in this case,
manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
dayset*3600*24*1000, pi);
Slog.i(TAG, "Start self-define alarm");
}
記得開啓Alarmagr前先清除之前的對象
private void cancelAlarmTime(){
if(manager!=null)
manager.cancel(pi);
}