• 【天气APP】之桌面时钟witget组件


     桌面时钟之组件开发:

    整个流程例如以下:

    下载地址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);
    }
    }


  • 相关阅读:
    python3:操作excel文件
    将博客搬至CSDN
    easyui给select控件绑定change事件
    Oracle 查询时间在当天的数据
    Spring Jdbc使用like模糊查询
    Intellij idea workflow 工作流插件安装
    使用jQuery出现the function undefined
    java.el.PropertyNotFoundException解决方法
    使用反射类、Class类获取指定的构造器并实例化对象
    使用mybatis查询数据,按特定顺序排序
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7002987.html
Copyright © 2020-2023  润新知