转载自:http://www.eoeandroid.com/thread-71211-1-1.html

我们这一片是接着上一篇来继续进行讲解开发插件,那么我们现在就来继续的讲解App Widget布局,那就不多说了,我们来看看内容吧:

创建App Widget布局

  你必须在XML中为你的App Widget定义一个初始布局并保存到项目的res/layout/ 目录下。你可以使用如下所列的视图对象来设计你的App Widget,但是在此之前,请先阅读并理解App Widget Design Guidelines.

  如果你熟悉在XML中声明布局,那么创建这个App Widget布局是很简单的。但是,你必须意识到那个App Widget布局是基于RemoteViews, 这并不支持所有类型的布局或视图小部件。

  一个RemoteViews对象(以及,相应的,一个App Widget)可以支持下面这个布局类:

Java代码:

FrameLayout
LinearLayout
RelativeLayout
//以及下面的小部件类:
AnalogClock
Button
Chronometer
ImageButton
ImageView
ProgressBar
TextView

不支持这些类的派生。

  使用AppWidgetProvider类

  你必须通过在清单文件中使用< receiver>元素来声明你的AppWidgetProvider 类实现为一个广播接收器(参见上面的Declaring an App Widget in the Manifest)。

  AppWidgetProvider 类扩展BroadcastReceiver 为一个简便类来处理App Widget广播。AppWidgetProvider只接收和这个App Widget相关的事件广播,比如这个App Widget被更新,删除,启用,以及禁用。当这些广播事件发生时,AppWidgetProvider 将接收到下面的方法调用:

Java代码:

onUpdate(Context, AppWidgetManager, int[])

这个方法调用来间隔性的更新App Widget,间隔时间用AppWidgetProviderInfo 里的updatePeriodMillis属性定义。这个方法也会在用户添加App Widget时被调用,因此它应该执行基础的设置,比如为视图定义事件处理器并启动一个临时的服务Service,如果需要的话。但是,如果你已经声明了一个配置活动,这个方法在用户添加App Widget时将不会被调用,而只在后续更新时被调用。配置活动应该在配置完成时负责执行第一次更新。

onDeleted(Context, int[])
  当App Widget从宿主中删除时被调用。
   onEnabled(Context)
  当一个App Widget实例第一次创建时被调用。比如,如果用户添加两个你的App Widget实例,只在第一次被调用。如果你需要打开一个新的数据库或者执行其他对于所有的App Widget实例只需要发生一次的设置,那么这里是完成这个工作的好地方。
   onDisabled(Context)
  当你的App Widget的最后一个实例被从宿主中删除时被调用。你应该在onEnabled(Context)中做一些清理工作,比如删除一个临时的数据库。
   onReceive(Context, Intent)
  这个接收到每个广播时都会被调用,而且在上面的回调函数之前。你通常不需要实现这个方法,因为缺省的AppWidgetProvider 实现过滤所有AppWidget 广播并恰当的调用上述方法。

   注意:  在Android 1.5中, 有一个已知问题,onDeleted()方法在该调用时不被调用。为了规避这个问题,你可以像Group post中描述的那样实现onReceive() 来接收这个onDeleted()回调。

最重要的AppWidgetProvider 回调函数是onUpdated(), 因为它是在每个App Widget添加进宿主时被调用的(除非你使用一个配置活动)。如果你的App Widget 要接受任何用户交互事件,那么你需要在这个回调函数中注册事件处理器。如果你的App Widget不创建临时文件或数据库,或者执行其它需要清理的工作,那么onUpdated() 可能是你需要定义的唯一的回调函数。比如,如果你想要一个带一个按钮的App Widget,当点击时启动一个活动,你可以使用下面的AppWidgetProvider实现:

Java代码:

public class ExampleAppWidgetProvider extends AppWidgetProvider {
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {final int N = appWidgetIds.length;
for (int i=0; i< N; i++) {
int appWidgetId = appWidgetIds[i];
Intent intent = new Intent(context, ExampleActivity.class);PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.appwidget_provider_layout);views.setOnClickPendingIntent(R.id.button, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
}}}

这个AppWidgetProvider 仅定义了onUpdated() 方法,为了定义一个PendingIntent,来启动一个活动并使用setOnClickPendingIntent(int, PendingIntent)方法把它附着到这个App Widget的按钮上。注意它包含了一个遍历appWidgetIds中所有项的循环,这是一个IDs数组,每个ID用来标识由这个Provider创建的一个App Widget。这样,如果用户创建多于一个这个App Widget的实例,那么它们将被同步更新。不过,对于所有的App Widget实例,只有一个updatePeriodMillis 时间表被管理。比如,如果这个更新时间表被定义为每隔两个小时,而且App Widget的第二个实例是在第一个后面一小时添加的,那么它们将按照第一个所定义的周期来更新而第二个被忽略。

【Android】开发桌面小插件(二)相关推荐

  1. 【Android】开发桌面小插件(一)

    转载自:http://www.eoeandroid.com/thread-71208-1-1.html 应用程序窗口小部件App Widgets 应用程序窗口小部件(Widget)是微小的应用程序视图 ...

  2. 【Android】开发桌面小插件(三)

    转载自:http://www.eoeandroid.com/thread-71213-1-1.html 这是我们这个小项目的最后一篇了,大家一定是非常期待的,那么我们就来看看这最后一篇的内容吧. 注意 ...

  3. Android开发笔记(一百二十六)自定义音乐播放器

    MediaRecorder/MediaPlayer 在Android手机上面,音频的处理比视频还要复杂,这真是出人意料.在前面的博文< Android开发笔记(五十七)录像录音与播放>中, ...

  4. Android开发笔记(一百二十二)循环器视图RecyclerView

    RecyclerView RecyclerView是Android在support-v7库中新推出控件,中文别名为循环器视图,它的功能非常强大,可分别实现ListView.GridView,以及瀑布流 ...

  5. Android开发笔记(一百二十三)下拉刷新布局SwipeRefreshLayout

    SwipeRefreshLayout 下拉刷新布局SwipeRefreshLayout是Android又一与时俱进的控件,顾名思义它随着用户手势向下滑动就会触发刷新操作.从实际的下拉效果来看,Swip ...

  6. 【Android开发VR实战】二.播放360°全景视频

    转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53924006 本文出自[DylanAndroid的博客] [Android开发 ...

  7. Android开发工具---SQLiteManager插件

    Android开发工具---SQLiteManager插件 效果图如下: 平时在开发过程中查看数据库都要把数据库文件导出来,然后再用其他工具打开,SQLiteManager插件则给予我们一些便利,只需 ...

  8. Android开发桌面插件

    前提:公司应用需要开发插件,奈何我实在没有块的开发经验,查阅了一些资料,花了几天时间,完成了插件的开发. 开发桌面插件需要了解AppWidgetProvider,RemoteViewsService, ...

  9. Android开发-Sensor传感器-AndroidStudio(二)小方

    转载请注明出处: http://blog.csdn.net/iwanghang/article/details/53418690 我正在参加CSDN 2016博客之星评选,希望得到您的宝贵一票~ ht ...

最新文章

  1. linux源码安装浏览器,Linux系统手动安装Firefox浏览器
  2. spring cloud @RefreshScope刷新问题
  3. spring_IOC_自動裝配
  4. vue-cli 打包部署
  5. Maximum upload size exceede上传文件大小超出解决
  6. 【剑指offer】面试题32 - I:从上到下打印二叉树(Java)
  7. node模块加载机制。
  8. react navtagion api
  9. 一张思维导图,让正则表达式不再难懂
  10. java 删除列 csv,Java- CSV / Delete column in csv file
  11. android通过WebView的evaluateJavascript()调用JS
  12. django中url 和 path 的区别
  13. c语言api_C语言现在好找工作吗?我开始学了这么久的C语言,应该怎么办?
  14. 筋膜枪按摩眼睛?后果很严重
  15. Windows 10用户档案无法加载的解决方法
  16. 一个程序员应该怎样去学习和掌握计算机英语
  17. STM32学习笔记 | 引起电源和系统异常复位的原因
  18. ElasticSearch使用学习
  19. SQL Server报错:Arithmetic overflow error converting expression to data type int.
  20. JAVA几种缓存技术介绍说明

热门文章

  1. GDUT_22级专题三 F - Built?
  2. java中关闭redis事务_Redis 事务支持
  3. python中虚拟环境的创建virtualenv workon
  4. 爱豆教育:新手小白在亚马逊开店需要注意这4点问题?
  5. jquery 循环html标签,jQuery – 通过具有特定属性的元素循环
  6. 下载视频网站视频的小技巧
  7. kivy中文手册python_Kivy(一)
  8. EN 622-2纤维板规范—第二部分:硬木板的要求
  9. P04 BorderLayout
  10. 港联证券|港股拥抱特专科技企业 内资券商“修炼内功”蓄势而为