博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android定制组件之Widget之昨天今天明天
阅读量:5105 次
发布时间:2019-06-13

本文共 3440 字,大约阅读时间需要 11 分钟。

        今天我们学习如何利用Widget来显示系统当前的日期和时间,下面给出该场景的案例:

1案例技术要点

(1)创建TimeWidgetProvider继承于AppWidgetProvide类,并重写如下两个方法:

onDeleted(...):当第一次向桌面添加Widgets的时候回调此方法
onEnabled(...):当最后一个同类型Widgets实例被删除时回调此方法
(2)创建TimerService继承于Service类,用于获取系统当前日期与时间。
(3)通过获取AppWidgetManager实例将TimerService和TimeWidgetProvider关联起来。

2案例代码陈列

AndroidManifest.xml

strings.xml

Lynn时间Widgets

main.xml

Widget布局文件:time_appwidget.xml

Widget背景文件:rectangle.xml

Widget显示内容提供者:TimeWidgetProvider.java

package cn.lynn.widgets;import android.appwidget.AppWidgetManager;import android.appwidget.AppWidgetProvider;import android.content.Context;import android.content.Intent;public class TimeWidgetProvider extends AppWidgetProvider {    // 当用户从桌面上删除widgets的时候回调此方法    @Override    public void onDeleted(Context context, int[] appWidgetIds) {            }        // 当第一次向桌面添加Widgets时回调此方法    @Override    public void onEnabled(Context context) {        context.startService(new Intent(context, TimerService.class));    }    // 当最后一个同类型Widgets实例被删除时回调此方法    @Override    public void onDisabled(Context context) {        context.stopService(new Intent(context, TimerService.class));    }    @Override    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {            }}

Widget服务管理类:TimerService.java

package cn.lynn.widgets;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Timer;import java.util.TimerTask;import android.app.PendingIntent;import android.app.Service;import android.appwidget.AppWidgetManager;import android.content.ComponentName;import android.content.Intent;import android.net.Uri;import android.os.IBinder;import android.widget.RemoteViews;public class TimerService extends Service {    private Timer timer;        @Override    public void onCreate() {        super.onCreate();        timer = new Timer();        timer.schedule(new TimeUpdateWork(), 0, 1000);    }        private final class TimeUpdateWork extends TimerTask{        public void run() {            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");            String time = dateFormat.format(new Date());            RemoteViews remoteView = new RemoteViews(getPackageName(), R.layout.time_appwidget);            remoteView.setTextViewText(R.id.textView, time);            // 拨号意图            PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 100,                    new Intent(Intent.ACTION_CALL, Uri.parse("tel:18777777777")), 0);            // 点击Widget拨打号码:18777777777            remoteView.setOnClickPendingIntent(R.id.textView, pendingIntent);            AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());            appWidgetManager.updateAppWidget(new ComponentName(getApplicationContext(), TimeWidgetProvider.class), remoteView);        }    }    @Override    public void onDestroy() {        timer.cancel();        timer = null;        super.onDestroy();    }    @Override    public IBinder onBind(Intent intent) {        return null;    }}

3案例效果展示

 

转载于:https://www.cnblogs.com/innosight/archive/2013/06/02/3271213.html

你可能感兴趣的文章
Ugly Windows
查看>>
DataGridView的行的字体颜色变化
查看>>
Java再学习——关于ConcurrentHashMap
查看>>
如何处理Win10电脑黑屏后出现代码0xc0000225的错误?
查看>>
局域网内手机访问电脑网站注意几点
查看>>
c++ STL
查看>>
json数据在前端(javascript)和后端(php)转换
查看>>
[Serializable]的应用--注册码的生成,加密和验证
查看>>
Groovy中那些神奇注解之ToString
查看>>
Day19内容回顾
查看>>
第七次作业
查看>>
MySql update inner join!MySql跨表更新 多表update sql语句?如何将select出来的部分数据update到另一个表里面?...
查看>>
我最宏大的个人愿望
查看>>
北漂周记--第5记--拼命编程
查看>>
比赛总结一
查看>>
SpringBoot项目打包
查看>>
JSP的3种方式实现radio ,checkBox,select的默认选择值
查看>>
Linux操作系统 和 Windows操作系统 的区别
查看>>
《QQ欢乐斗地主》山寨版
查看>>
文件流的使用以及序列化和反序列化的方法使用
查看>>