Android项目-Widget

原创 2015年11月19日 20:33:38

Android项目-Widget

App Widgets是一个小的应用控件,它能够嵌入在其他的应用中(像主屏幕),并且可以周期性的更新。
能够拥有widget的应用程序被叫做App Widget host,

  • 简单创建widget (具体内容在开发文档中写的很详细)
    • 1.创建一个AppWidget类,继承AppWidgetProvider(这个类继承自BroadcastReceiver)
    • 2.在manifest文件中声明上面创建的AppWidget, 即声明
    • 3.在xml目录下,定义widget的元数据
    • 4.定义widget的布局文件

Widget的细节

  • 在配置widget的元数据时,
    • 如果widget的最小宽度大于屏幕的宽度,那么这个widget是不会被显示的
    • widget的默认更新时间是没个半个小时,如果我们设置android:updatePeriodMillis=”0”, 那么我们就可以自己控制这个更新时间。
  • widget的生命周期

    • onUpdate : Widget在更新时调用的方法
    • onDelete : 每当一个widget从桌面删除时会调用
    • onReceive: 当接收到Widget操作时首先调用的是OnReceive方法,然后才是相关的操作方法。可以说由这个方法去调用widget的其他的生命周期方法
    • onEnabled:此方法在Widget第一次被创建的时候调用,并且只调用一次,此方法中常放入初始化数据,服务的操作。
    • onDisabled:所用Widget被删除是调用的方法,同onEnabled方法相对
  • widget的生命周期方法中不能做耗时操作

    • 这是因为AppWidgetProvider实际上继承自BroadcastReceiver,要知道的是广播的onReceive()方法必须自10秒内完成,因此widget的生命周期方法也得在10内完成
    • 一般,我们可以开启一个服务去做业务逻辑相关事情

操作widget

既然把widget放在桌面上,我们肯定是要使用它来展示数据的,但是桌面是别人的App(例如 android launch2),即我们的widge是展示在别人的应用中的,
那么我们如何操作它呢?

要完成上面的工作,主要与这3个对象有关:

  • AppWidgetManager
    • 可以利用其updateAppWidget(ComponentName, RemoteViews)方法;来更新我们的widget

以下面代码为例:

这是位于以个服务的onCreate()方法中

    @Override
    public void onCreate() {
        super.onCreate();

        //桌面小控件的管理者 
        widgetManager = AppWidgetManager.getInstance(this);

        //下面要使用一个定时器,来周期性更新widget
        timer = new Timer();
        timerTask = new TimerTask() {       
            @Override
            public void run() {



                /**
                 * 由于更新的需要,这里初始化一个RemoteViews
                 * 包名即我们的应用程序的包名, 布局文件即我们的widget的布局文件
                 */
                RemoteViews views = new RemoteViews(getPackageName(), R.layout.process_widget);
                /**
                 * 需要注意的是,RemoteViews并没有findViewById()方法。
                 * 这里需要使用下面类似的方法来更新我们的widget界面控件显示
                 */
                views.setTextViewText(R.id.process_count,"正在运行的软件: 10"); 
                views.setTextViewText(R.id.process_memory, "可用内存:1G" );



                /*
                 *当我们的widget,响应点击事件时,也是不可以像以前那样处理, 可以通过启动一个广播、服务或者Activity的方式来响应我们的点击事件
                 *这里,启动一个广播
                 */
                Intent intent = new Intent();   
                //发送一个隐式意图
                intent.setAction("com.suixin.mobileguard.response_widget_receicer");    
                PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
                //设置点击事件
                views.setOnClickPendingIntent(R.id.btn_clear, pendingIntent);


                //第一个参数表示上下文
                //第二个参数表示我们的widget对应类(继承AppWidgetProvider)
                ComponentName provider = new ComponentName(getApplicationContext(), MyAppWidget.class);
                //更新桌面
                widgetManager.updateAppWidget(provider, views);         
            }
        };

        //从0开始。每隔5秒钟更新一次
        timer.schedule(timerTask, 0, 5000); 
    }
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android项目实战--手机卫士32--给清理进程添加一个Widget

上一次,我们已经完成了当用户锁屏的时候,就清理一下内存,那么今天,人们就把清理内存的这个功能给加到Widget里面去, 首先,先给大家讲一下Widget,widget就是运行在桌面上的小部件啦,由于运...

android widget

  • 2014年07月10日 16:11
  • 13.7MB
  • 下载

Android Widget

  • 2012年11月06日 21:54
  • 888KB
  • 下载

jface databinding:可多选的widget List组件selection项目与java.util.List对象的双向数据绑定

需求说明如下图,一个可多选的List组件,初始表有3个值,希望实现与一个java.util.List对象(保存选中的值)的双向数据绑定。当List组件中选中的内容变化时,java.util.List对...
  • 10km
  • 10km
  • 2017年01月02日 17:39
  • 353

android Widget小组件开发

  • 2015年10月06日 15:52
  • 668KB
  • 下载

android app widget demo

  • 2016年09月22日 11:47
  • 253KB
  • 下载

Part 06 项目视图(Widget)(Qt)[2012.02.16]

Part 06  项目视图(Widget)(Qt) ——2012.02.16 0. 本次学习Qt时主要方法:分析代码,理清原代码思路,重写代码,将数代码整合至一个主窗口中实现。 1. 编写学习笔...
  • neicole
  • neicole
  • 2012年02月16日 02:20
  • 2156

android2.2中午widget文档(chm)

  • 2011年05月25日 22:26
  • 6.66MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android项目-Widget
举报原因:
原因补充:

(最多只允许输入30个字)