zoukankan      html  css  js  c++  java
  • 【天气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);
    }
    }


  • 相关阅读:
    博弈最高位POJ 1704(Georgia and BobNim博弈)
    图片优化ios学习之真机测试 copy图片错误解决方案
    输入左移校草计划(Nim)
    类型函数C语言void关键字
    图层设置GDAL/OGR创建DXF文件中多图层的方法
    浏览器下载Firefox os 模拟器安装教程步骤详解
    工程图标ios学习之给程序设置logo
    实例收藏Android开发环境搭建和Android开发基础知识汇总值得收藏
    乱码插入mac mysql汉字乱码问题解决
    菜菜从零学习WCF一(WCF概述)
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7002987.html
Copyright © 2011-2022 走看看