但是後面的版本並不能設定update的時間,他已經被設定成30分鐘更新一次
所以如果要讓widget自動更新比較好的做法事建立一個Service並註冊一個AlarmManager設定定時執行的間隔時間
以下為範例
在Service中定義一個PendngIntent
public static PendingIntent serviceIntent = null;
在Service中定義註冊AlarmManager的Function
public static void registerService(Context context) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
//如果serviceIntent不為null(已註冊過)
if (serviceIntent != null)
alarmManager.cancel(serviceIntent); //清除
final int updateInterval = 60 * 60000;//間隔時間單位為ms
//間隔時間不為0
if (updateInterval != 0) {
//如果serviceIntent為null
if (serviceIntent == null) {
//建立intent
Intent intent = new Intent(context, 要更新的Service.class);
//建立serviceIntent
serviceIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
//在AlarmManager設定重覆執行的Server的intent
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + updateInterval,
updateInterval, serviceIntent);
}
}
在Service中定義取消AlarmManager註冊
public static void removeService(Context context) {
if (serviceIntent != null) {
((AlarmManager) context.getSystemService(Context.ALARM_SERVICE)).cancel(serviceIntent);
serviceIntent = null;
}
}
最後在Widget實作onEnabled和onDisabled兩個Function
各別在裡面呼叫registerService和removeService即可
如
@Override
public void onDisabled(Context context) {
// TODO Auto-generated method stub
UpdateService.removeService(context);
super.onDisabled(context);
}
@Override
public void onEnabled(Context context) {
// TODO Auto-generated method stub
UpdateService.registerService(context);
super.onEnabled(context);
}