标签:arm ids hit ui组件 gets 服务 datetime appwidget 广播
桌面时钟之组件开发:
整个流程例如以下:
下载地址demo:www.github.com/xufeifandj
service+组件+广播进行后台实时更新时间
(一)开机广播监听开机启动service服务启动后。马上动态注冊一个广播去监听时间发生变化。
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_TIME_TICK); //时间发生改变
intentFilter.addAction(Intent.ACTION_TIME_CHANGED); //
intentFilter.addAction(Intent.ACTION_DATE_CHANGED); //日期改动
intentFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED); //时区改动
this.getBaseContext().registerReceiver(widgetsUpdateReceiver, intentFilter);
(二) 广播监听到有时间发生改变,就可以进行更新组件
class UpdateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
updateWidget();
}
}
//发送广播去更新组件就可以
public synchronized void updateWidget() {
sendBroadcast(new Intent("com.android.FERRIS_UPDATE_WIDGET"));
}
(3) WeatherWidget_time 继承于 AppWidgetProvider事实上也是一个广播。
我们在这里注冊了一些更新的action
//组件发生改变时候。进行更新
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
for (int i = 0; i < appWidgetIds.length; i++) {
RemoteViews updateView = lewaBuildUpdate(context, appWidgetIds[i],false,true,true);
appWidgetManager.updateAppWidget(appWidgetIds[i], updateView);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
@Override
public void onReceive(final Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){//开机启动
//启动时间后台服务。动态去注冊广播
Intent service=new Intent(context, WidgetTimeService.class);
context.startService(service);
updateTimeAlarm(context); //并去更新一下时钟
}else if(intent.getAction().equals("com.android.FERRIS_UPDATE_WIDGET")){ //监听到时间变化。更新wiget
updateTimeAlarm(context);
}
super.onReceive(context, intent);
}
(4)更新时间
public synchronized void updateTimeAlarm(Context context){
// AppWidgetManager appWidgetManger = AppWidgetManager
// .getInstance(context);
// int[] appIds = appWidgetManger.getAppWidgetIds(new ComponentName(
// context, WeatherWidgetV5_time.class));
//
ComponentName provider = new ComponentName(context,context.getPackageName()+ ".WeatherWidget_time");
AppWidgetManager gm = AppWidgetManager.getInstance(context);
int[] appWidgetIds;
appWidgetIds = gm.getAppWidgetIds(provider);
for (int i = 0; i < appWidgetIds.length; i++) { //遍历进行更新
RemoteViews updateView = lewaBuildUpdate(context, appWidgetIds[i],false,true,true); //更新UI组件。參数为分别为日期 星期 等。是否更新
gm.updateAppWidget(appWidgetIds[i], updateView);
}
}
标签:arm ids hit ui组件 gets 服务 datetime appwidget 广播
原文地址:http://www.cnblogs.com/jzssuanfa/p/7002987.html