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

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

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

一.开发步骤

  • 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>

好了我们运行一下

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

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

更多相关文章

  1. Android新手入门实例之Android漂亮时钟的源代码
  2. Android中事件处理之TouchListener实现步骤
  3. android 时钟组件AnalogClock与Clock
  4. android之组件4
  5. android组件
  6. 【转】android常用组件
  7. android经常调用的组件
  8. Android四大组件Service之bindService启动
  9. Android 四大组件之再论BroadCast

随机推荐

  1. Android(安卓)OptionMenu
  2. Android体验系列之--AnalogClock控件
  3. Android开机自动启动程序设置
  4. Android(安卓)从网上获取图片
  5. Android学习笔记-常见报错
  6. 打开android默认浏览器
  7. Android判断app是否是第一次运行
  8. Android(安卓)TabWidget设计模板
  9. Turn your Android(安卓)phone into a DL
  10. Android动态添加Fragment