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


PS:学习自某网站(不打广告)
这个小组件相信大家都很熟悉吧,以前的墨迹天气的时候我也经常用,现在好像很少有软件用了,个人感觉吧…他对于一个用户而言来说是十分方便,快捷的,而且我们可以定制一些各种各样的开关等等等等….
我们新建一个工程——Widget


>

一.开发步骤

  • 1.绘制Widget布局(比较局限性的View)
  • 2.配置Widget的属性
  • 3.自定义APPwidgetProvicer
  • 4.提供Configuration Activity(配置Activity)

二.实现桌面时钟

需求:

  • 1.实时更新时间
  • 2.添加,删除

1.appwidget-provider

既然我们要使用它,我们就先在res目录下新建一个xml文件夹,然后再new一个appwidget-provider,再新建一个layout名叫widget_clock.xml等下我们调用

<?xml version="1.0" encoding="utf-8"?><appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"    android:initialLayout="@layout/widget_clock"    android:minHeight="40dp"    android:minWidth="100dp"    android:updatePeriodMillis="8640000" >appwidget-provider>

再新建一个layout,名为widget_clock.xml就是我们widget小组件的布局了,因为我们只要一个时钟,所以,就只写个TextView就OK了,ID是tv_clock;

2.ClockProvider

主要是监听小组件的状态

package com.lgl.widget;import android.appwidget.AppWidgetManager;import android.appwidget.AppWidgetProvider;import android.content.Context;import android.content.Intent;/** * 时钟小组件的监听 *  * @author lgl *  */public class ClockProvider extends AppWidgetProvider {    // 刷新的时候执行    @Override    public void onUpdate(Context context, AppWidgetManager appWidgetManager,            int[] appWidgetIds) {        // TODO Auto-generated method stub        super.onUpdate(context, appWidgetManager, appWidgetIds);    }    // 第一个添加到屏幕上    @Override    public void onEnabled(Context context) {        // TODO Auto-generated method stub        super.onEnabled(context);        // 启动Service        context.startService(new Intent(context, ClockService.class));    }    // 最后一个widget从屏幕移除    @Override    public void onDisabled(Context context) {        // TODO Auto-generated method stub        super.onDisabled(context);        context.stopService(new Intent(context, ClockService.class));    }    // 从屏幕移除    @Override    public void onDeleted(Context context, int[] appWidgetIds) {        // TODO Auto-generated method stub        super.onDeleted(context, appWidgetIds);    }}

3.ClockService

当我们把小组件添加到我们的屏幕上的时候,我们就启动这个服务去更新时间

package com.lgl.widget;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Timer;import java.util.TimerTask;import android.app.Service;import android.appwidget.AppWidgetManager;import android.content.ComponentName;import android.content.Intent;import android.os.IBinder;import android.widget.RemoteViews;/** * 更新小组件事件的服务 *  * @author lgl *  */public class ClockService extends Service {    // 定时器    private Timer timer;    // 日期格式    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    @Override    public IBinder onBind(Intent intent) {        return null;    }    @Override    public void onCreate() {        // TODO Auto-generated method stub        super.onCreate();        timer = new Timer();        /**         * 参数:1.事件2.延时事件3.执行间隔事件         */        timer.schedule(new TimerTask() {            @Override            public void run() {                updateView();            }        }, 0, 1000);    }    /**     * 更新事件的方法     */    private void updateView() {        // 时间        String time = sdf.format(new Date());        /**         * 参数:1.包名2.小组件布局         */        RemoteViews rViews = new RemoteViews(getPackageName(),                R.layout.widget_clock);        // 显示当前事件        rViews.setTextViewText(R.id.tv_clock, time);        // 刷新        AppWidgetManager manager = AppWidgetManager                .getInstance(getApplicationContext());        ComponentName cName = new ComponentName(getApplicationContext(),                ClockProvider.class);        manager.updateAppWidget(cName, rViews);    }    @Override    public void onDestroy() {        // TODO Auto-generated method stub        super.onDestroy();        timer = null;    }}

我们的服务写好了之后我们就可以去监听了,当我们创建了小组件的时候就启动服务,当我们移除了小组件的时候就停止服务

// 第一个添加到屏幕上    @Override    public void onEnabled(Context context) {        // TODO Auto-generated method stub        super.onEnabled(context);        //启动Service        context.startService(new Intent(context,ClockService.class));    }    // 最后一个widget从屏幕移除    @Override    public void onDisabled(Context context) {        // TODO Auto-generated method stub        super.onDisabled(context);        context.stopService(new Intent(context,ClockService.class));    }

但是别忘了,我们还需要在AndroidMainifest.xml中注册一下

 <receiver android:name="com.lgl.widget.ClockProvider" >            <intent-filter>                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />            intent-filter>           <meta-data               android:name="android.appwidget.provider"               android:resource="@xml/widgetconfig" />        receiver>        <service android:name="com.lgl.widget.ClockService" >        service>

好了我们运行一下

Demo下载:http://download.csdn.net/detail/qq_26787115/9437254

更多相关文章

  1. Android应用程序主要组件知识小结
  2. android四大组件之Service服务之总体概述
  3. Android线程安全问题总结
  4. 从源码角度分析android事件分发处理机制
  5. 从智行Android(安卓)项目看组件化架构实践-携程技术中心
  6. android PULL 解析XML
  7. 巧用事件分发机制,和我一起hold住android外围设备
  8. Android(安卓)View中的控件和监听方法...
  9. Hbuilder集成个推时Android和ISO中推送的区别

随机推荐

  1. Android EditText不显示光标的解决方法
  2. android杀进程方法
  3. 如何避免android ANR
  4. Unity Android打包apk安装错误INSTALL_FA
  5. Android PVPlayer介绍
  6. android:screenOrientation横屏竖屏设置
  7. 知识体系引导
  8. Android(安卓)最火的快速开发框架android
  9. Android常用知识笔记
  10. Android的架构与Android应用程序启动流程