利用widget实现一个时钟功能小插件
利用widget实现一个时钟功能小插件
一般来说 widget 程序由以下部分组成:
a. AppWidgetProvider 的实现
b. widget外观布局定义文件
c. widget 参数配置文件
d.服务的实现
e.androidManifest.xml文件配置
a.写一个类继承AppWidgetProvider
public class TonyAppWidgetProvider extends AppWidgetProvider {
private final static String TAG = "TonyAppWidgetProvider";
/**
* 1:在xml文件中android:updatePeriodMillis="86400000"只能精确到分 不满足我们的要
*:2:当我们用户每添加一个appwidget就会调用一次
*/
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Log.e(TAG, "onUpdate");
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
/**
* 在没有 appwidget 当用户初次添加appwidget的时候调用
* 1:做一些初始化的工作
* 2:打开数据库
* 3:启动服务
*
*/
public void onEnabled(Context context) {
super.onEnabled(context);
Log.e(TAG, "onEnabled");
Intent intent = new Intent(context, TonyAppWidgetService.class);
context.startService(intent);
}
/**
* 用户每删除一个appwidget就会调用一次
*/
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
Log.e(TAG, "onDeleted");
super.onDeleted(context, appWidgetIds);
}
/**
* 最后一个appwidget删除时调用
*/
@Override
public void onDisabled(Context context) {
super.onDisabled(context);
Log.e(TAG, "onDisabled");
}
}
=================================================================
b.widget外观布局定义文件,添加一个布局文件,文件取名为:tony_appwidget
<?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="vertical" >
<TextView
android:id="@+id/tv_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/holo_red_light"
android:text="TextView" />
</LinearLayout>
=========================================================================
c. widget 参数配置文件
建一个名为xml的文件夹,并且在此文件夹建一个.xml文件取名为tony_appwidget_info
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="294dp"
android:minHeight="72dp"
android:previewImage="@mipmap/ic_launcher"
android:initialLayout="@layout/tony_appwidget"
android:resizeMode="horizontal|vertical">
</appwidget-provider>
<!--
android:minWidth="294dp" appwidget最小的宽度
android:minHeight="72dp" appwidget最小的高度
android:updatePeriodMillis="86400000" appwidget 更新的时间 不能精确到秒 一般最小的精度是分
问题:怎么控制更新的时间 ,代码中控制
android:previewImage="@drawable/ic_launcher" 预览图片
android:initialLayout="@layout/example_appwidget" 当我们添加一个appwidget时的布局
当我们添加一个appwidget自动启动的Activity的名字
android:configure="com.example.android.ExampleAppWidgetConfigure"
重置appwidget的大小时的模式:表示可以水平 垂直拉伸
android:resizeMode="horizontal|vertical">
-->
======================================================================================================
d.服务的实现
创建一个文件TonyAppWidgetService继承Service
public class TonyAppWidgetService extends Service {
private AppWidgetManager am;
//方式1:Handler + Runnable
private Handler handler=new Handler();
private Runnable runnable=new Runnable() {
@Override
public void run() {
//获取系统的时间,并更新appwidget视图
//RemoteView :不是当前应用的视图 属于其他的应用程序
RemoteViews remoteViews=new RemoteViews(getPackageName(),R.layout.tony_appwidget);
//获取当前时间
String time=new Date().toLocaleString();
//设置显示
remoteViews.setTextViewText(R.id.tv_time,time);
//随机改变字体的颜色
Random rd = new Random();
remoteViews.setTextColor(R.id.tv_time, Color.rgb(255, 255, rd.nextInt(256)));
ComponentName componentName=new ComponentName(getApplicationContext(),TonyAppWidgetProvider.class);
am.updateAppWidget(componentName,remoteViews);
//点击 发送一个意图 PendingIntent 延迟意图
Intent intent = new Intent(getApplicationContext(), MyNote.class);
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 100, intent, 0);
remoteViews.setOnClickPendingIntent(R.id.tv_time, pendingIntent);
handler.postDelayed(runnable,1000);
}
};
public IBinder onBind(Intent intent) {
return null;
}
public int onStartCommand(Intent intent, int flags, int startId) {
am = AppWidgetManager.getInstance(this);
handler.post(runnable);
//启动定时器
return super.onStartCommand(intent, flags, startId);
}
}
=======================================================================================================
e.配置androidManifest.xml文件
<receiver android:name=".TonyAppWidgetProvider" >
<intent-filter >
<!-- 意图 要去哪里 -->
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<!-- 去哪里的时候要携带的数据 -->
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/tony_appwidget_info" />
</receiver>
<service android:name="com.xiaoyao.android.mynote.TonyAppWidgetService"></service>
利用widget实现一个时钟功能小插件相关推荐
- python基于opencv的手势识别_怎么在Python3.5 中利用OpenCV实现一个手势识别功能
怎么在Python3.5 中利用OpenCV实现一个手势识别功能 发布时间:2020-12-22 11:56:32 来源:亿速云 阅读:67 作者:Leah 怎么在Python3.5 中利用OpenC ...
- python神奇时钟项目_怎么在Python项目中利用Pygame绘制一个时钟
怎么在Python项目中利用Pygame绘制一个时钟 发布时间:2020-11-30 14:24:30 来源:亿速云 阅读:54 作者:Leah 怎么在Python项目中利用Pygame绘制一个时钟? ...
- 利用pgzero做一个接球的小游戏
利用pgzero做一个接球的小游戏 说明 pgzero为python的一个用于游戏制作的库,它基于pygame模块 可用如下命令去安装 pip install pygame pip install p ...
- python推箱子小游戏_小伙利用Python自制一个推箱子小游戏!
原标题:小伙利用Python自制一个推箱子小游戏! 导语 月初更波python制作小游戏系列吧用python写了个推箱子小游戏,在这里分享给大家,让我们愉快地开始吧 小伙利用Python自制一个推箱子 ...
- 利用 Python 写一个颜值测试小工具
我们知道现在有一些利用照片来测试颜值的网站或软件,其实使用 Python 就可以实现这一功能,本文我们使用 Python 来写一个颜值测试小工具. 很多人学习python,不知道从何学起. 很多人学习 ...
- 熬了三个大夜利用Python开发一个炸金花小游戏,注意别玩上瘾了~~(附完整源码)
大家好,我是你们的好朋友王老师~ 众所周知扑克牌可谓是居家旅行.桌面交友的必备道具,今天我们用 Python 来实现一个类似炸金花的扑克牌小游戏,先来看一下基本的游戏规则. 炸(诈)金花又叫三张牌, ...
- 简单利用lce1602制作一个时钟
利用所学的单片机知识LCD1602的知识及电路知识编程实现单片机I/O 口控制 LCD1602 的显示时钟 main.c #include <REGX52.H> #include < ...
- HTML5实现一个时钟动画,利用html5制作一个时钟动画效果
我们先来看下效果图(不考虑颜色搭配): (学习视频分享:html5视频教程) 我们首先要理解如何去实现这个时钟,暂时不要考虑动画,学着将问题进行拆解,一步一步实现. 首先我们需要画个方形,有个边框,给 ...
- 51单片机利用液晶制作一个时钟
代码部分有比较详细的注释,这里就不对每一个部分分别做介绍了.有问题欢迎在评论区留言. #include <REGX52.H> sbit dula=P2^6;//声明U1锁存器的锁存端 s ...
最新文章
- 【青少年编程(第31周)】一个有趣又有料的抖音号!
- 《智源社区周刊:预训练模型》第1期:吴恩达团队医疗影像预训练、快手落地万亿参数模型...
- 盘点机器学习和统计模型的差异
- iptables基本配置方法
- jvm 错误_JVM因“ OutOfMemory”错误而关闭-我该怎么办?
- 2.【sheel学习】数组
- 推荐一个值得加入C++开发者俱乐部
- java gbk汉字 10进制,用java程序将GBK字符转成UTF-8编码格式
- java 下载后删除,在服务器端生成文件后,下载后并删除,改了后发现文件变成空白解决思路...
- 学习windows内核一
- 苹果cmsV10教程
- Jmeter脚本录制和压测
- 外贸常用术语_外贸常用术语大全
- Go typeof、 Kind、Elem、Name用法
- date.getMonth() date.getDate())
- CC2530+RFX2401启用功放过程小结
- 微信小程序:拼多多推客开发
- python 文件缓存
- Games104现代游戏引擎入门-lecture12游戏引擎的粒子和声效系统
- 如何向外行解释你为什么想打产品经理?
热门文章
- html网页大赛小组作品,ACCPT183班HTML网页设计大赛:小页面,大精彩!
- Harbor仓库清理
- 【sdx12】PC电脑不更新IPv6地址导致单独IPv6拨号的时候,PC无法访问外网问题分析及解决方案(sdx12使用SLAAC IPv6)
- 数据分析中的异常值处理
- pfc计算机仿真在矿山发展趋势,PFC电路的计算机仿真模拟.pdf
- adb发送什么命令能在手机屏幕弹窗显示_常用命令之adb指令
- MATLAB寻找三维曲面的有效波峰(滤除噪声产生的极大值)
- 东西向流量组件 Calico 的落地实践
- ALC声卡选择建议2014
- processing-python-泡泡龙(终极真实版)