桌面时钟之组件开发:

整个流程例如以下:

下载地址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. HDU 5371 Hotaru's problem Manacher+尺取法

    题意:给你一个序列,求最长的两段回文子串,要求他们共用中间的一半. 思路:利用Manacher求出p[i]表示的当前位置的最长回文串长度,然后把每一个长度大于等于2的回文串的左区间和右区间分别放到两个 ...

  2. UVA Building designing

    题目总结来说求一段序列,必须正负交替,且绝对值递增 #include <iostream> #include <cstdio> #include <cstring> ...

  3. python jieba分词工具

    源码地址:https://github.com/fxsjy/jieba 演示地址:http://jiebademo.ap01.aws.af.cm/ 特点 1,支持三种分词模式: a,精确模式,试图将句 ...

  4. box-shadow制作各种单边,多边阴影

    一.box-shadow问题探究 box-shadow 在MDN定义以及详解: box-shadow 以由逗号分隔的列表来描述一个或多个阴影效果.该属性让你可以对几乎所有元素的边框产生阴影.如果元素同 ...

  5. php验证邮箱,手机号是否正确

    function is_valid_email($email)//判断是不是邮箱的函数{    return preg_match('/^[a-zA-Z0-9._%-]+@([a-zA-Z0-9.-] ...

  6. qt获取磁盘序列号

    #include "windows.h" QString lpRootPathName = "c:\\"; LPTSTR lpVolumeNameBuffer= ...

  7. JBoss配置连接池

    什么是数据库连接池? 配置连接池为的是解决效率问题.由于每创建一个连接都是非常耗时的,有了连接池,就能够提前放一些连接进去.以后我们再用连接就去连接池里面取而不是每次都创建.可是我们知道连接池是有上限 ...

  8. [Python] Format Strings in Python

    Single quotes and double quotes can both be used to declare strings in Python. You can even use trip ...

  9. ElasticSearch指南

    ElasticSearch快速指南 ElasticSearch是基于Apache Lucene的分布式搜索引擎, 提供面向文档的搜索服务. 安装ElasticSearch 文档 创建文档 访问文档 更 ...

  10. 60.浅谈nodejs中的Crypto模块

    转自:https://www.cnblogs.com/c-and-unity/articles/4552059.html node.js的crypto在0.8版本并没有改版多少,这个模块的主要功能是加 ...