本文為大家介紹定時器刷新的詳細程序。
1、定時刷新 只刷新一次
首先要發送一個廣播 PendingTIntent.getBroadcast()就類似于一個sendBroadcast
里面有四個參數 第一個就是context 第二個參數是個發送端的私人參數,起區分作用 第三個intent 第四個 flags參數可以指定PendingIntent的一些行為特點,是用來針對Intent.fillIn() ,這里面沒有用到0即可。
PendingTIntent 核心就是異步激發 有興趣的可以看
PnedingTIngtent詳解
am.set()方法用來激發,第一個參數是鬧鐘的類型 就不贅述了 第二個就是開始時間()
這個參數的類型要根據前一個鬧鐘的類型來的 , RTC_WAKEUP RTC POWER_OFF_WAKEUP使用的絕對時間,其他的類型就是相對時間 ,相對時間就是相對于開機時運行的時間,絕對時間就是當前的時間。
public staTIc void sendUpdateBroadcast(Context context,long time){
AlarmManager am = context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(conext, UpdateReceiver.class);
i.putExtra(“time”, time);//time參數是刷新間隔
PendingIntent pendingIntent = PendingIntent.getBroadcast(contexxt, 0, i, 0);
//我這個是系統現在時間加上time時間進行刷新
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + time, pendingIntent);
}
然后需要自定義一個接受器刷新的動作在這里面執行
public static class UpdateReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
long times=intent.getLongExtra(“time”,0);
Toast.makeText(context, “開始刷新”+intent.getLongExtra(“time”,0), Toast.LENGTH_SHORT).show();
}
}
2、定時刷新 根據間隔時間一直刷新
類似于鬧鐘
am.setRepeating ()第二個參數就是第一次刷新時間 (如果時間已經過了,會馬上響應一次),第三個就是間隔時間 。注意此廣播非覆蓋的 如若要改變刷新時間一定要先取消此廣播
public static void sendBroadcastRepeat(Context ctx,int hour,int minuter){
Intent intent =new Intent(ctx, RepeatReceiver.class);
intent.putExtra(“hour”,hour);
intent.putExtra(“minuter”,minuter);
PendingIntent pendingIntent = PendingIntent.getBroadcast(ctx,0, intent, 0);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minuter);
calendar.set(Calendar.SECOND, 00);
calendar.set(Calendar.MILLISECOND, 0);
AlarmManager am = getAlaramManager(ctx);
am.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(), 1000 * 60 * 60 * 24, pendingIntent);
}
同樣也要寫一個接收器
public static class RepeatReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, “定時刷新”, Toast.LENGTH_SHORT).show();
}
}
用戶評論(0)