- 浏览: 676509 次
- 性别:
- 来自: 安徽
文章分类
- 全部博客 (252)
- Html/Div+CSS (12)
- Js/Jquery (34)
- Flex (2)
- Ajax (3)
- Java (35)
- C# (15)
- Spring (16)
- Hibernate (13)
- Struts2 (12)
- Struts1 (7)
- DWR (1)
- iBatis/myBatis (9)
- Tag(JSTL、EL) (1)
- Android (44)
- SQL (7)
- SEO (7)
- Exception (3)
- Tool (10)
- Other (3)
- WebService (9)
- Apache (7)
- Ext (0)
- Utils (12)
- thinking in programme (2)
- Hadoop (0)
- ActiveMQ (0)
- HTML5/CSS3 (0)
- WPF (1)
- NodeJs (1)
- 设计模式 (0)
- 程序人生 (1)
- 随笔 (1)
- Linux (1)
- Load Balance (0)
最新评论
-
drinkjava2:
太复杂了而且不通用,利用ThreadLocal可完美解决这一问 ...
JDBC的多条件动态查询 -
u013107014:
multipartRequest.getFiles(" ...
多文件上传 by MultipartFile and Multiple -
liyys:
可惜没讲你mysql数据库的表的设计
iBatis入门 -
Mapple_leave:
效果还是挺不错的,谢谢了。
中文简体与繁体的转换 -
arcpad:
JS禁用浏览器退格键
一、 AppWidget
在使用 Android 手机时,用户经常会将一些常使用的软件拖放到桌面上以方便操作。这时就需要使用 AppWidget 组件,在 android.appwidget 包综合那个定义了 5 个核心的操作类。
No. |
类名称 |
描述 |
1 |
AppWidgetProvider |
定义了 AppWidget 的基本操作,需要通过子类进行设置 |
2 |
AppWidgetProviderInfo |
AppWidget 组件的元数据提供者,如组件的大小、更新时间等 |
3 |
AppWidgetHostView |
创建 AppWidget 的 View 显示,此为真正的 View ,与之对应的还有 RemoteView |
4 |
AppWidgetHost |
监听 AppWidget 的服务以及创建 AppWidgetHostView |
5 |
AppWidgetManager |
用于更新相应的 AppWidget |
由于 AppWidget 要在桌面上显示界面,而这个界面又要通过 AppWidgetManager 程序进行控制,所以还需要使用一个 android.widget.RemoveViews 类,此类的主要功能是描述一个 View 的显示实体, RemoveViews 会通过进程间通信机制传递个 AppWidgetHost 。
这里的 RemoteViews 只是把一个进程的控件嵌入到另外一个进程中显示的一个方法,所有的事件处理操作依然在原始进程中,而 AppWidget 需要依靠 RemoveViews 来完成显示内容的更新操作, RemoveViews 常用方法有:
No. |
方法 |
描述 |
1 |
Public RemoteViews(String packageName,int layoutId) |
创建新的 RemoveViews 组件,并指定所需要的布局管理器文件 |
2 |
Public void addView(int viewId,RemoteViews nestedView) |
为 RemoveViews 增加一个组件 |
3 |
Public void setXxx(int viewId,String methodName,Xxx value) |
设置指定内容,如 setBoolean() 、 setImageViewResource() 、 setTextViewText() 等 |
4 |
Public void setOnClickPendingIntent(int viewId,PendingIntent pendingIntent) |
设置单击事件触发之后要操作的 PendingIntent 对象 |
5 |
Public void setProgressBar(int viewId,int max,int progress,Boolean indeterminate) |
设置要操作的 ProgressBar 组件 |
除了 RemoveViews 类作为远程 View 之外, Activity 程序中也提供了对应的 AppWidgetProvider 类用于与 RemoveView 组件的操作相对应,通过文档可以发现 AppWidgetProvider 是 BroadcastReceiver 的子类,所以在使用时需要在 AndroidManifest.xml 中配置 receive 节点, AppWidgetProvider 类中也提供了像 Activity 类中的生命周期控制方法,其方法如下:
No. |
方法 |
描述 |
1 |
Public void onDeleted(Context context,int[] appWidget) |
删除 AppWidget 时触发 |
2 |
Public void onDisabled(Context context) |
当最后一个 AppWidget 删除时触发 |
3 |
Public void onEnabled(Context context) |
当第一个 AppWidget 启动时触发 |
4 |
Public void onReceive(Context context,Intent intent) |
接受广播事件 |
5 |
Public void onUpdate(Context context, AppWidgetManager appWidgetManger, int[] appWidgetIds) |
当指定的更新时间到达或者用户添加 AppWidget 时触发 |
注:
1 、 onUpdate 方法决定了 AppWidget 组件的显示功能以及远程 AppWidget 的事件处理绑定,当组件更新时,需要使用 AppWidgetManager 类更新远程 AppWidget 组件(严格说是 RemoveViews ),而 AppWidgetManager 会广播 Action 名称是“ android.appwidget.action.APPWIDGET_UPDATE ”的 Intent 。
2 、对于 onDisabled 和 onEnabled 方法,因为 android 中一个程序可以同时在桌面上设置多个显示的组件。
MyAppWidget.java
package com.iflytek.demo; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; public class MyAppWidget extends AppWidgetProvider { @Override public void onDeleted(Context context, int[] appWidgetIds) {// 删除时触发 System.out.println("*** MyAppWidget onDeleted"); super.onDeleted(context, appWidgetIds); } @Override public void onDisabled(Context context) {// 删除最后一个触发 System.out.println("*** MyAppWidget onDisabled"); super.onDisabled(context); } @Override public void onEnabled(Context context) {// 启动第一个时触发 System.out.println("*** MyAppWidget onEnabled"); super.onEnabled(context); } @Override public void onReceive(Context context, Intent intent) {// 处理广播 System.out.println("*** MyAppWidget onReceive"); super.onReceive(context, intent); } @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {// 更新时触发 System.out.println("*** MyAppWidget onUpdate"); super.onUpdate(context, appWidgetManager, appWidgetIds); } }
上面只是对AppWidgetProvider中的几个与生命周期有关的方法进行覆写,但是如果想让一个AppWidget程序进行显示,还需要定义一个设置桌面显示的配置文件,该文件保存在res\xml文件夹中。
xdwang_appwidget.xml.xml
<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minHeight="80px" android:minWidth="300px" android:updatePeriodMillis="6000" android:initialLayout="@layout/xdwang_appwidget"> </appwidget-provider>
xdwang_appwidget.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ImageView android:id="@+id/img" android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <Button android:id="@+id/but" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="王旭东" /> </LinearLayout>
AndroidManifest.xml
<receiver android:name=".MyAppWidget" > <!-- AppWidget更新时触发 --> <intent-filter > <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <!-- 定义AppWidget的元数据 ,android:name:AppWidget提供者,android:resource程序要使用的配置信息 --> <meta-data android:name="android.appwidget.provider" android:resource="@xml/xdwang_appwidget" /> </receiver>
二、使用 AppWidget 跳转到 Activity 进行操作
前面我们简单描述了 AppWidget 程序的配置,但是在实际情况下,很多时候需要单击桌面显示的 AppWidget 可以进入一个 Activity 程序进行更加复杂的操作处理。这里我们首先来看看 AppWidgetManager 提供的方法:
No. |
方法 |
描述 |
1 |
Public void updateAppWidget(int appWidgetId,RemoveViews views) |
更新指定的 AppWidget 组件 |
2 |
Public void updateAppWidget(ComponentName provider, RemoveViews views) |
更新指定的 AppWidget 组件 |
3 |
Public void updateAppWidget(int[] appWidgetIds,RemoveViews views) |
更新指定的 AppWidget 组件 |
4 |
Public static AppWidgetManager getInstance(Context context) |
取得一个 AppWidgetManager 的实例 |
MyAppWidget.java
package com.iflytek.demo; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; import android.widget.RemoteViews; public class MyAppWidget extends AppWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {// 更新时触发 for (int x = 0; x < appWidgetIds.length; x++) {// 更新所有显示的AppWidget Intent intent = new Intent(context, AppWidget02Activity.class);// 设置Activity PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);// 设置准备执行的Intent RemoteViews remote = new RemoteViews(context.getPackageName(), R.layout.xdwang_appwidget);// 更新要操作的RemoveViews remote.setOnClickPendingIntent(R.id.but, pendingIntent); appWidgetManager.updateAppWidget(appWidgetIds[x], remote);// 更新远程的视图 } } }
三、使用AppWidget进行广播
MyAppWidget.java
package com.iflytek.demo; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.widget.RemoteViews; public class MyAppWidget extends AppWidgetProvider { @Override public void onReceive(Context context, Intent intent) { if ("com.iflytek.action.MYAPPWIDGET_UPDATE".equals(intent.getAction())) {// 判断是否是指定的Action RemoteViews remote = new RemoteViews(context.getPackageName(), R.layout.xdwang_appwidget);// 定义RemoveViews remote.setImageViewResource(R.id.img, R.drawable.ic_launcher);// 设置图片 remote.setTextViewText(R.id.but, "王旭东改变");// 更新组件文字 AppWidgetManager appWidgetManager = AppWidgetManager .getInstance(context);// 取得AppWidgetManager ComponentName componentName = new ComponentName(context, MyAppWidget.class);// 定义使用的组件 appWidgetManager.updateAppWidget(componentName, remote);// 更新组件 } else { super.onReceive(context, intent); // 如果不写此代码,表示无法调用onUpdate() } } @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { Intent intent = new Intent();// 设置操作要执行的Intent intent.setAction("com.iflytek.action.MYAPPWIDGET_UPDATE"); PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);// 设置准备执行的Intent RemoteViews remote = new RemoteViews(context.getPackageName(), R.layout.xdwang_appwidget);// 定义要操作的RemoveViews remote.setOnClickPendingIntent(R.id.but, pendingIntent); appWidgetManager.updateAppWidget(appWidgetIds, remote);// 更新远程视图 } }
AndroidManifest.xml
<receiver android:name=".MyAppWidget" > <intent-filter > <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <intent-filter > <action android:name="com.iflytek.action.MYAPPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/xdwang_appwidget" /> </receiver>
发表评论
-
This version of ADT requires android SDK
2013-07-25 16:45 1604Windows系统下用Eclipse开发工具开发An ... -
Android学习13-----网络通信(4) WebView组件
2012-11-27 09:18 2523WebView 是一个开发的浏览 ... -
Android学习13-----网络通信(3) 与Web Service进行通讯
2012-11-26 09:40 1901这里我们的WebService使用xFire开发。 ... -
Android学习13-----网络通信(2) 与Socket交换数据
2012-11-23 09:11 3313对于网络开发而言,最常用的交互模式:WebService、We ... -
Android学习13-----网络通信(1) 与WEB服务器交换数据
2012-11-22 09:11 2198与Web服务器交互: 如果手机要想与 web ... -
Android学习11-----多媒体技术(5) 媒体录制
2012-11-16 08:10 1897在Android中通过android.media ... -
Android学习11-----多媒体技术(4) 使用摄像头拍照,多点触控
2012-11-15 08:37 2896一、摄像头拍照 前面说媒体播放 时了解了 ... -
Android学习11-----多媒体技术(3) 媒体播放
2012-11-14 08:25 1421在 Androi ... -
Android学习11-----多媒体技术(2) Animation
2012-11-13 08:47 2001一、渐变动画, Tweened Animation ... -
Android学习11-----多媒体技术(1) 绘制简单图形,Bitmap,Matrix
2012-11-12 08:48 1631一、绘制简单图 ... -
Android学习12-----手机服务(4) 传感器
2012-11-19 09:13 2025传感器一般用于游戏中,在 Android 系统中为 ... -
Android学习12-----手机服务(1) 取得电池电量和声音服务:AudioManager
2012-11-18 11:18 3514一、取得电池电量信息 ... -
Android学习10-----Android组件通信 (7) 广播机制:Broadcast
2012-11-01 08:43 1522一、 广播: 广播也是一种信息的发送机制,在 ... -
Android学习10-----Android组件通信 (6) PendingIntent
2012-10-31 08:20 2274Intent 的主要功能是表示用 ... -
Android学习10-----Android组件通信 (5) Service
2012-10-30 08:25 1746Service 基本组成: ... -
Android学习10-----Android组件通信 (4) 消息机制
2012-10-29 08:22 1559在 Android 操作系统中存在着消息队列的操作 ... -
Android学习10-----Android组件通信 (3) ActivityGroup
2012-10-26 08:23 2338导航栏在 Android 中的应用是很常见的,前面 ... -
Android学习10-----Android组件通信 (2) Activity生命周期
2012-10-25 08:16 1292Activity 是整个 Android 平台的基 ... -
Android学习10-----Android组件通信 (1) Intent
2012-10-24 08:43 2024在一个项目之中,会由多个 Activity ... -
Android判断是否有网络连接
2013-04-25 16:34 1446Android中判断有时候因为功能的需求,需要判断是否有网络 ...
相关推荐
在Android系统中,AppWidget是桌面小部件的实现,它允许开发者将应用程序的功能和信息集成到用户的主屏幕上,用户无需打开应用即可与之交互。这个压缩包“Android -- AppWidget源码.zip”很可能是包含了Android App...
在Android开发中,AppWidget是桌面小部件,它允许开发者将应用程序的功能直接集成到用户的主屏幕上,无需打开应用。在本案例中,我们探讨的是如何在AppWidget中使用ListView,这是一个增强用户交互的方式,使小部件...
在Android开发中,桌面组件(Widget)是一种可以让用户在手机或平板电脑的主屏幕上直接查看和操作的应用小部件。本文将深入探讨如何在Android中创建和使用Widget,以及相关的框架类和方法。 首先,我们来看App...
在Android平台上,AppWidget是应用程序可以提供的一种桌面小部件,让用户在主屏幕上获得快速的交互体验,无需打开完整的应用程序。这个“Android高级应用源码-Android小部件AppWidget.zip”包含了一个关于如何创建和...
- `appwidget-provider.xml`文件定义了Widget的元数据,包括最小尺寸、更新频率等。 10. **AndroidManifest.xml配置**: - 需要在这里注册AppWidgetProvider,并关联其对应的布局和配置文件。 11. **测试和调试...
了解了基本概念后,开发者可以通过阅读《Android 之桌面组件 App Widget 案例》、《Android Launcher开发之桌面小部件AppWidget详解》以及相关的博客文章来深入学习。这些资料提供了丰富的实例和代码解析,帮助理解...
AppWidget是Android操作系统提供的一种组件,允许开发者在用户主屏幕上创建小型应用程序,这些小部件无需用户直接启动应用就能显示和交互。AppWidget为用户提供了一种快速访问应用功能的方式,增强了用户体验。本文...
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/app_widget_info" /> ``` **步骤四...
【Android小部件AppWidget】是Android操作系统中的一种特殊组件,它允许用户在主屏幕上放置小型的应用程序界面元素,提供快捷的操作或显示实时信息。在Android应用开发中,AppWidget是扩展应用程序功能的一种方式,...
在Android开发中,AppWidget是桌面小部件,它允许用户在主屏幕上与应用程序进行交互,而无需实际打开应用。Service是Android系统中的一个组件,它可以在后台长时间运行,执行一些耗时的操作,如音乐播放、数据同步等...
在Android开发中,AppWidget是桌面小部件,它允许用户在主屏幕上添加应用程序的功能或信息概览,无需打开应用程序本身。AppWidgetTest项目显然旨在演示如何创建和管理这些小部件。接下来,我们将深入探讨AppWidget...
在Android系统中,AppWidget是桌面小部件的实现方式,它允许开发者创建可以在用户主屏幕上显示的小应用程序。这些小部件可以提供快速访问某些功能或显示实时信息,无需打开完整的应用程序。本篇将深入探讨如何使用...
需要在AndroidManifest.xml中通过<appwidget-provider>标签声明。 4. **实现AppWidgetProvider类**: 重写`onUpdate()`、`onDeleted()`、`onEnabled()`等方法,以处理用户添加、删除或交互时的事件。例如,在`on...
Android AppWidget是Android系统提供的一种桌面小部件功能,它允许开发者创建可以被用户直接放置在主屏幕上的小型应用程序,提供快捷的功能或者展示实时信息。在本文中,我们将深入探讨AppWidget的基本概念、工作...
AppWidget是可以在主屏幕上独立显示的应用程序组件,而Shortcut则是指向特定应用或活动的快捷方式。我们将主要讨论AppWidget的开发。 1. **AppWidgetProvider**:这是Widget的核心类,它继承自BroadcastReceiver。...
- **配置元数据**: 在AndroidManifest.xml中为添加appwidget-provider标签,设置小部件的属性,如最小宽度、高度、初始配置等。 - **发布小部件**: 用户通过长按主屏幕,选择“小部件”类别,然后选择你的AppWidget...
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
通过学习这份源码,开发者不仅能掌握AppWidget的基本使用,还能深入理解Android系统如何处理和显示这些组件,从而提升应用的用户体验。同时,了解AppWidget的内部机制有助于在实际项目中设计出更高效、更用户友好的...
本篇文章将深入探讨“Android组件通信”这一主题,特别是聚焦于AppWidget与Activity间的跳转以及数据传输。 首先,我们要理解Android组件的基本概念。Activity是用户界面的主要载体,它负责展示用户可以互动的视图...
Android小部件(Widget)是Android操作系统提供的一种桌面扩展功能,允许开发者将应用程序的部分功能或信息直接集成到用户的主屏幕上,用户无需打开应用就能与之交互。在这个“android widget实例下载”中,我们可以...