App Widget的更新方法介绍_第1页
App Widget的更新方法介绍_第2页
App Widget的更新方法介绍_第3页
App Widget的更新方法介绍_第4页
App Widget的更新方法介绍_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、App Widget的更新方法介绍Widget是一种小巧但是功能强大的程序,使用户能够方便快捷的获取信息,在 PC上被广泛的 使用,现在随着OPhone的推出,widget也进入到了手机领域, 为用户带来了方便的同时也为开发者实现更多很酷想法的可能。在OPhone中有 两种widget开发方式,一种是以HTML+CSS+JavaScript的开发方式,另一种是 沿用Android平台的开发方式,本文介绍的是后面一种,在OPhone平台上开发 App widgetowidget 一般开发方式介绍下面以编写一个时钟的小程序来介绍如何编写widget。创建一个类,让其继承类 AppWidgetPro

2、vider,在 AppWidgetProvider 类 中有许多的方法,例如 onDelete(Context, int),onEnable(Context)等等, 一般情况下我们纸需要重写 onUpdate(Context, AppWidgetManager, int)这 个方法就可以了,这个方法是当触发器更新widget时候执行的操作。在项目的AndroidMenifest.xml文件中添加一个receiver标签,让其指向 前面创建的AppWidgetProvider子类,内容如下:intent-filter中过滤了 APPWIDGET_UPDATE事件,这个事件是由系统触发的更 新事件

3、,每个widget必须包含这个事件;meta-data标签描述的是widget的配 置文件指向,该文件描述了 widget的一些基本信息。编写widget的provider文件信息,本例中该文件名叫做 widget_setting.xml,开发者可以随便取名,只要在AndroidMenifest.xml中写 正确就行。minWidth和minHeight是widget的最小宽度和高度,这个值是一个参考值,系 统会根据实际情况进行改变,initialLayout属性指明了 widget的视图布局文 件,updatePeriodMillis属性是widget每隔多久更新一次的时 间,单位为毫秒。接

4、下来就是界面布局,在这个示例中只需要一个TextView控件就可以,代 码如下:准备工作完毕,接下来完善继承自AppWidgetProvider的自定义类,重写onUpdate(Context, AppWidgetManager,int)函数,代码如下:package com.dt.time;2.import java.util.Date;4.import android.appwidget.AppWidgetManager;import android.appwidget.AppWidgetProvider;import android.content.Context;import andr

5、oid.widget.RemoteViews;9.public class widget extends AppWidgetProvider (11.Overridepublic void onUpdate(Context context, AppWidgetManager appWidgetManager, int a ppWidgetIds) (/ TODO Auto-generated method stubsuper.onUpdate(context, appWidgetManager, appWidgetIds);16./1.获取当前时间Date now = new Date();S

6、tring strNow = now.toLocaleString();/2.获取 RemoteViews 对象RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main) ;/3.显示时间到widgetviews.setTextViewText(R.id.text, strNow);/4.更新 widgetappWidgetManager.updateAppWidget(appWidgetIds, views);之后运行写好的widget查看下成果,widget的启动与普通程序不同,它不会在 程序列表

7、中显示,而是要长按桌面在弹出的列表中选择Widgets项目,之后选择 本示例time。widget的扩展更新方法在上例中widget更新是通过定时方式实现的,在普通情况下这种更新方式已经 足够了,但是对于某些应用使用定时方式更新显得就不够用了。比如短信 提示, 当有新的短信到来时我们希望能够实时的更新widget,如果还是用定时更新显 然是不行的,那么能不能让widget接受除appwidget_update之外的系统消息 呢?答案是可以的。仔细查看下文档后可以发现,widget只是一个receiver,既然是receiver那么 也就可以接受所有的系统消息了,接下来使用短信提醒示例来演示wi

8、dget接受 系统其他消息的方式,本例中将只前一示例进行修改。修改AndroidMenifest.xml文件,向其中添加vider.Telephony.SMS_RECEIVED 监听事件,代码如下:添加了这个短信监听事件后,我们就已经向widget添加了监听短信的功能了, 实际操作非常简单。接下来需要添加一个阅读短信的权限,在AndroidMenifest.xml中任意位置添加 然后还需要修改下widget_setting.xml文件,将其中的 updatePeriodMillis属性设为0,也就是不定时更新,这样可以展示这个widget 是实时更新的。之后修改AppWidgetProvide

9、r的子类,使其将短信内容显示到widget上。 在本示例中我们将不再修改onUpdate(Context, AppWidgetManager,int 口)函 数,而是重写 onReceive(Context context, Intent intent)函数,这个函数其 实能够实现包括onUpdate在内的所有函数功能,代码如下:package com.dt.time;2.import android.appwidget.AppWidgetManager;import android.appwidget.AppWidgetProvider;import android.content.Comp

10、onentName;import android.content.Context;import android.content.Intent;import android.widget.RemoteViews;9.public class widget extends AppWidgetProvider (11.Overridepublic void onReceive(Context context, Intent intent) (/ TODO Auto-generated method stubsuper.onReceive(context, intent);16./1.获取 Remot

11、eViews 对象RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main) ;/2.显示新消息提醒views.setTextViewText(R.id.text, New message!);/3.更新 widgetAppWidgetManager appWidgetManager = AppWidgetManager.getlnstance(context);appWidgetManager.updateAppWidget(new ComponentName(context, widget.cla

12、ss), views);代码与上一示例差别不多,唯一有区别的地方便是appWidgetManager的实例化, 在上一示例中由于onUpdate()方法中有一个参数 是appWidgetManager因此我 们不需要单独实例化该对象,但是在onReceive()方法中并没有这个参数,因此 我们需要实例化一个appWidgetManager,通过AppWidgetManager.getInstance(Context)方法就可以获得一个appWidgetManager 实例。当然由于 onReceive()函数还缺少 appWidgetIds 这个 参数,因此我们也不能直接使用updateApp

13、Widget (int appWidgetIds, RemoteViews views)这个函数,而要改用 updateAppWidget (ComponentName provider, RemoteViews views)这个函数,其中 provider 参数是一个 ComponentName类型的值,简单的说就是组件名,通过实例化一个组件便可;widget的进阶更新方法上面的示例已经让widget可以实时的更新内容,但是如果要显示电池电量的话, 上面的方法还是不行的,为什么呢?原来android中并没有为获 取电池信息设 计单独的api,必须注册为一个service才能获取。按照上面的思

14、路那也简单, 只要我们写个service,然后在系统中广播更新消息就可以了;但是根据文档 中的说明,要获取电池信息的service必须是通过Context.registerReceiver() 这个函数来注册一个监听电池变化的事件才能获取,这样一来对我们设计就带 来了麻烦。解决的方法倒也很简单,就是单独写个service在里面注册一个监听事件,当电 池电量发生变化的时候就更新widget,看起来与我们上面的例子很相似,就是 多了一个service,但是这里还有一个不同的是,我们更新widget的方法不再 是在onUpdate()或者是onReceive中进 行,而是在service中直接对wi

15、dget 修改,似乎跟文档上说的出入很大,但是看看上面显示短信的例子我们会发现, 在那个示例中似乎widget的 更新与appWidgetProvider已经没有什么关系了, 我们即没有从参数获得appWidgetManager实例,也没从参数中获得 appWidgetIds,一切都是我们自己新建了一个,因而不再widget更新的方法完 全是可行的。下面来介绍下代码:(1)本示例中沿用第二个示例的代码,添加一个名叫service.java类package com.dt.time;2.import android.app.Service;import android.appwidget.AppW

16、idgetManager;import android.content.BroadcastReceiver;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.graphics.Color;import android.os.IBinder;import android.widget.RemoteViews;13.public class mServi

17、ce extends Service (15.16.Overridepublic void onStart(Intent intent, int startId) (/ TODO Auto-generated method stubsuper.onStart(intent, startId);registerReceiver(this.mBR, new IntentFilter(Intent.ACTION_BATTERY_CHANGED) ;22.24.声明一个广播接受对象,用接受电池信息private BroadcastReceiver mBR = new BroadcastReceiver

18、() (27.Overridepublic void onReceive(Context context, Intent intent) (/ TODO Auto-generated method stub31.if(Intent.ACTION_BATTERY_CHANGED.equals(intent.getAction()这里添加相关处理动作bLevel = intent.getIntExtra(level”, 0); /获取当前电量36.String value = String.valueOf(bLevel) + %; /显示电量的文字38.AppWidgetManager awm = AppWidgetManager.getInstance(context);RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.main);41.views.setTextViewText(R.id.text, value);43.awm.updateAppWidget(new Compone

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论