开发数字时钟桌面小控件
随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)
所谓桌面小控件,就是指能直接显示在Android系统桌面的小程序,比如模拟时钟等。桌面小控件是通过Broadcast的形式来进行控制的,每个桌面小控件都对应一个BroadcastReceiver。Android提供了一个AppWidgetProvider类,它是BroadcastReceiver的子类,开发者只要开发一个继承AppWidgetProvider的子类,并重写其不同状态的生命周期方法即可。AppWidgetProvider提供如下四个不同的生命周期方法:
onUpdate:负责更新桌面控件的方法;实现桌面控件通常会考虑重写该方法。
onDeleted:当一个或多个桌面小控件被删除时回调该方法。
onEnabled:当接收到ACTION_APPWIDGET_ENABLED 广播时回调该方法。
onDisabled:当接收到ACTION_APPWIDGET_DISABLED广播时回调该方法。
开发桌面小控件步骤:
1、创建一个RemoteViews对象,创建该对象时可以指定加载指定的界面布局文件。
2、如果需要改变上一步所加载的界面布局文件的内容,可通过RemoteViews对象进行修改。一般来说,界面中主要包含ImageView和TextView两种组件。
3、创建一个ComponentName对象。
4、调用AppWidgetManager的updateAppWidget方法更新桌面小控件。
下面以开发数字时钟为例(代码原型来源疯狂讲义):
AppWidgetProvider子类:
package com.home;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.widget.RemoteViews;public class DigitClock extends AppWidgetProvider {private Timer timer = new Timer();private AppWidgetManager appWidgetManager;private Context context;// 将0~9的液晶数字图片定义成数组private int[] digits = new int[] { R.drawable.image0, R.drawable.image1,R.drawable.image2, R.drawable.image3, R.drawable.image4,R.drawable.image5, R.drawable.image6, R.drawable.image7,R.drawable.image8, R.drawable.image9 };// 将显示小时、分钟、秒钟的ImageView定义成数组private int[] digitViews = new int[] { R.id.digit_image1,R.id.digit_image2, R.id.digit_image3, R.id.digit_image4,R.id.digit_image5, R.id.digit_image6 };@Overridepublic void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {this.appWidgetManager = appWidgetManager;this.context = context;// 定义计时器timer = new Timer();// 启动周期性调度timer.schedule(new TimerTask() {@Overridepublic void run() {// 发送空消息,通知界面更新handler.sendEmptyMessage(0x123);}}, 0, 1000);}private Handler handler = new Handler() {public void handleMessage(Message msg) {if (msg.what == 0x123) {RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.digit);// 定义SimpleDateFormat对象SimpleDateFormat df = new SimpleDateFormat("HHmmss");// 将当前时间格式化成HHmmss的形式String timeStr = df.format(new Date());for (int i = 0; i < timeStr.length(); i++) {// 将第i个数字字符转换成对应的数字int num = timeStr.charAt(i) - 48;// 将第i个图片设为对应的液晶数字图片views.setImageViewResource(digitViews[i], digits[num]);}// 将AppWidgetProvider子类实例包装成ComponentName对象ComponentName componentName = new ComponentName(context,DigitClock.class);// 调用AppWidgetManager将remoteViews添加到ComponentName中appWidgetManager.updateAppWidget(componentName, views);super.handleMessage(msg);}}};
}
布局文件(digit.xml):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal" ><ImageViewandroid:id="@+id/digit_image1"android:layout_width="wrap_content"android:layout_height="wrap_content" /><ImageViewandroid:id="@+id/digit_image2"android:layout_width="wrap_content"android:layout_height="wrap_content" /><ImageViewandroid:id="@+id/digit_image7"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:src="@drawable/image" /><ImageViewandroid:id="@+id/digit_image3"android:layout_width="wrap_content"android:layout_height="wrap_content" /><ImageViewandroid:id="@+id/digit_image4"android:layout_width="wrap_content"android:layout_height="wrap_content" /><ImageViewandroid:id="@+id/digit_image8"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:src="@drawable/image" /><ImageViewandroid:id="@+id/digit_image5"android:layout_width="wrap_content"android:layout_height="wrap_content" /><ImageViewandroid:id="@+id/digit_image6"android:layout_width="wrap_content"android:layout_height="wrap_content" /></LinearLayout>
配置receiver:
<receiverandroid:name="com.home.DigitClock"android:label="@string/app_name" ><!-- 将该BroadcastReceiver当成桌面下控件 --><intent-filter><action android:name="android.appwidget.action.APPWIDGET_UPDATE" /></intent-filter><!-- 指定桌面小控件的meta-data --><meta-dataandroid:name="android.appwidget.provider"android:resource="@xml/appwidget_provider" /></receiver>
appwidget_provide.xml:
<?xml version="1.0" encoding="utf-8"?>
<!--
指定该桌面组件的基本配置信息:minWidth:桌面小控件的最小宽度minHeight:桌面小控件的最小高度updatePeriodMillis:更新频率
initialLayout:初始时显示的布局
-->
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"android:initialLayout="@layout/digit"android:minHeight="70dp"android:minWidth="150dp"android:updatePeriodMillis="1000" />
开发数字时钟桌面小控件相关推荐
- Android之RemoteViews篇上————通知栏和桌面小控件
Android之RemoteViews篇上----通知栏和桌面小控件 一.目录 文章目录 Android之RemoteViews篇上----通知栏和桌面小控件 一.目录 二.RemoteViews的概 ...
- linux桌面显示温度,请问ubuntu下有没有什么桌面小控件现实显卡温度cpu使用率之类的...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 检测电脑中的传感器芯片: sudo sensors-detect 一路回车.执行完后会列出几个模块,将它们添加进启动模块里(我这里是下面2个). sudo ...
- android桌面时钟小控件开发记录
所谓桌面小控件,就是能之间显示在Android系统桌面的小程序. 桌面小控件的实现是基于Broadcast的形式实现的,因此,每一个桌面小控件都对应于一个BroadcastReceiver类.Andr ...
- 【Qt】Qt 开发桌面程序 ( Qt 版本 5.14.2 | 编辑 Qt 桌面按钮控件 | 修改按钮文本 | 为按钮添加点击事件 | 系统调用 | 去掉系统调用命令窗口 )
文章目录 一.添加按钮控件 二.修改按钮文本 三.为按钮添加点击事件 ( 弹出对话框 ) 四.为按钮添加点击事件 ( 打开记事本 ) 五.为按钮添加点击事件 ( 打开计算器 ) 六.去掉系统调用时弹出 ...
- mac下dashboard小控件开发实例(附源码)
1.背景 用mac的用户都应该知道,mac有一个很好的功能,就是dashboard小控件的功能,按下F12键就可以自由切换.博主最近在背GRE单词,就尝试这开发了一个背单词的dash ...
- 如何在Android实现桌面清理内存简单Widget小控件
如何在Android实现桌面清理内存简单Widget小控件 我们经常会看到类似于360.金山手机卫士一类的软件会带一个widget小控件,显示在桌面上,上面会显示现有内存大小,然后会带一个按键功能来一 ...
- visual studio开发工具的C#主流控件属性一览表
visual studio开发工具的C#主流控件属性一览表 visual studio开发工具的C#主流控件属性一览表 详细的介绍了各控制属性的详细中文介绍 C#控件及常用设计整理 1.窗体 1.常 ...
- ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl
第四章 组合控件开发CompositeControl 大家好,今天我们来实现一个自定义的控件,之前我们已经知道了,要开发自定义的控件一般继承三个基 类:Control,WebControl,还有一个就 ...
- OS X开发:NSProgressIndicator进度指示器控件
2019独角兽企业重金招聘Python工程师标准>>> OS X开发:NSProgressIndicator进度指示器控件 NSProgressIndicator是OS X平台上的活 ...
最新文章
- 近期活动盘点:​年末必学课程《社会网络分析》
- ruby中DBI连接MySQL数据库步骤详解
- ES6-14 Unicode表示法、字符串方法、模板字符串
- 弄断过河电缆_你说的是:剪断电缆线
- 使用CImage绘制半透明图片
- idhttp.post方式 调用datasnap rest 远程方法(转咏南兄)
- 配置HistoryServer
- XP SP3多数功能借鉴Vista 安装将无需密码
- InVest模型的安装及应用说明
- 基于ricequant的lstm时间序列股价预测(pytorch)
- 【渝粤题库】陕西师范大学200091 东方文学专题研究 作业
- java 面试 英语自我介绍
- 百度地图迁徙大数据_百度地图迁徙大数据:复工后北上广深城内出行年后首次大幅增长...
- 2022身份识别技术大会 | 安全证件 | 可信身份认证 | 生物识别 | 公共安全安防身份技术展览会
- Qt编写的SMTP客户端(库)
- linux程序设计学习心得,几点学习Linux编程的建议
- java视频教程,Java面试资料
- 词云可视化——四行代码轻松上手
- 华为模拟器三个路由器全网互通
- 多张图片转成PDF文件