桌面时钟之组件开发:

整个流程例如以下:

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

}

}

【天气APP】之桌面时钟witget组件的更多相关文章

  1. Android Widget小组件开发(一)——Android实现时钟Widget组件的步骤开发,这些知识也是必不可少的!

    Android Widget小组件开发(一)--Android实现时钟Widget组件的步骤开发,这些知识也是必不可少的! PS:学习自某网站(不打广告) 这个小组件相信大家都很熟悉吧,以前的墨迹天气 ...

  2. Android经典项目开发之天气APP实例分享

    原文:Android经典项目开发之天气APP实例分享 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/mzc186/article/details/5 ...

  3. vue练手项目——桌面时钟

    用vue实现一个简单的网页桌面时钟,主要包括时钟显示.计时.暂停.重置等几个功能. 效果图如下,页面刚进来的时候是一个时钟,时钟上显示的时.分.秒为当前实际时间,点击计时器按钮后,页面变成一个计时器, ...

  4. vue3系列:vue3.0自定义全局弹层V3Layer|vue3.x pc桌面端弹窗组件

    基于Vue3.0开发PC桌面端自定义对话框组件V3Layer. 前两天有分享一个vue3.0移动端弹出层组件,今天分享的是最新开发的vue3.0版pc端弹窗组件. V3Layer 一款使用vue3.0 ...

  5. 利用react native创建一个天气APP

    我们将构建一个实列程序:天气App,(你可以在react native 中创建一个天气应用项目),我们将学习使用并结合可定义模板(stylesheets).盒式布局(flexbox).网络通信.用户输 ...

  6. [Android]天气App 2 项目搭建

       对于天气App,为了简化一些功能,暂时模仿MUUI系统提供的那个App.    本项目需要引入本人经常使用的一个工具库DroidTool,这个是本人根据工作中,收集到一些工具类,下载地址.    ...

  7. DB天气app冲刺二阶段第十天

    昨天困到不行了 所以就写了那么几句..所以今天好好写写了要.. 今天的收获了一个很重要的问题 就还是api接口的事情,以前的那个接口虽然能用但是总是不稳定,今天由决定百度的一下然后就发现了一个很好用的 ...

  8. DB天气app冲刺第十天

    好了 这是第十天了,按照白板任务上的来说的话,今天没有完成,所以等一下还要继续看看今天能不能把他做完,今天出的问题在于我又自己调整了一下UI设计,因为发现以前的设计发面有重复,浪费了屏幕.所以还不如省 ...

  9. DB天气app冲刺第六天

    更改计划 以前是准备完全自己写一个天气App 而且加上自己已经成功的做了一个安卓开发的小例子了,就感觉可以做的出来了.结果这五天证明自己一开始的思路就错了.所以上次跟别的同学问了一下.看了一下他们的方 ...

随机推荐

  1. Vsftp权限控制(持续增加中)

    把用户限制在自己的home目录中,例如限制用户Leon只能访问/home/Leon目录下的文件,不允许访问上级目录. 先打开配置文件 vi /etc/vsftpd/vsftpd.conf 第一种方法: ...

  2. SQL 2008 还原 SQL2005 备份文件 不成功的解决方法

    解决方法1:不要在数据库名字上点右键选择还原,而要是在根目录“数据库”三个字上点右键选择还原,然后再选择数据库,问题便可以解决,如果不行参照方法2 解决方法2:写sql语句处理: RESTORE DA ...

  3. ES6学习笔记(八)第七种类型Symbol

    1.概述 ES5 的对象属性名都是字符串,这容易造成属性名的冲突.比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突.如果有一种 ...

  4. 【 正确使用vim编辑器的姿势】

    vi:可视化接口(Visual Interface) vim:是vi的增强版(vi iMprove) vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样 ...

  5. Reference Counting GC (Part one)

    目录 引用计数法 计数器值的增减 new_obj()和update_ptr()函数 new_obj()生成对象 update_ptr()更新指针ptr,对计数器进行增减 优点 可即可回收垃圾 最大暂停 ...

  6. SSH框架的多表查询(方法二)

     必须声明本文章==>http://www.cnblogs.com/zhu520/p/7773133.html  一:在前一个方法(http://www.cnblogs.com/zhu520/p ...

  7. 洛谷 P1964 【mc生存】卖东西

    P1964 [mc生存]卖东西 题目背景 服务器好好玩 题目描述 lcy0x1去服务器的系统商店卖东西. 一个人的背包有21格. 一开始他的背包里有m件不同的物品(不能卖). 他要卖n种物品,每种物品 ...

  8. Android 经常使用的adb命令

    1.安装APK(假设加 -r 參数,保留已设定数据.又一次安装filename.apk) adb install xxx.apk adb install -r xxx.apk 2.卸载APK(假设加 ...

  9. Android与webserver数据交互编程---3网络爬虫项目实现虚拟浏览器的jsp后台执行

    背景:原先的b/s设计中在一个jsp界面中实现多个复杂的工作流... 为实现移动接口的调用保证工作流的正常webproject特别给提供了该虚拟浏览器的方案 原理:通过该方案实现虚拟浏览器后台运行js ...

  10. android 图片特效处理之怀旧效果

    图片特效处理系列将介绍图片的像素点的特效处理,这些物资注重的是原理.也就是说只要你知道这些算法不管是C++,VB,C#,Java都可以做出相同的特效.下面将介绍图片怀旧效果的算法.算法如下: 上面公式 ...