1. 用户长按Launcher弹出添快捷组件的Dialog,选择添加AppWidget,这时会打开一个Activity(AppWidgetPickActivity)显示系统中全部AppWidget,单击某一个AppWidget后会做以下操作:
(1) 通过AppWidgetService获取一个最新的appWidgetId值。
(2) 根据获取的appWidgetId值,向单击的AppWidget组件发APPWIDGET_ENABLED和APPWIDGET_UPDATE更新广播。并向/data/system/appwidgets.xml中添加此AppWidget的基本信息。
2. 启动AppWidgetPickActivity(第1步中提到)时使用的是startActivityForResult()方法,所以在向所单击的AppWidget组件发出 APPWIDGET_ENABLED和APPWIDGET_UPDATE更新广播后会执行onActivityResult()方法,做以下准备工作:
(1) 将需要被添加到Launcher的AppWidget基本信息保存到数据库中。
(2) 根据查找到的appWidgetId值(整型值)创建LauncherAppWidgetHostView布局对象。
(3) 根据查找到的appWidgetId值(整型值)从AppWidgetService中获取RemoteViews对象(因为是第一次启动所以RemoteViews对象为空)。
(4) 将获取到的RemoteViews对象的布局解析并设置到第(2)步中创建的LauncherAppWidgetHostView布局对象中。
(5) 将LauncherAppWidgetHostView布局对象添加到Launcher的WorkSpace中(因为RemoteViews对象为空,所以只在Launcher的WorkSpace中占了一个位置)。
3. 在第1步中已经向需要添加到Launcher中的AppWidget发出了更新消息(注意:第一步和第二步是异步执行的),继续做以下事情:
(1) 每个AppWidget接收到广播后都会调用onEnabled()方法和onUpdate()方法,在onEnabled()方法中进行一些初始化操作,在 onUpdate()方法中创建RemoteViews布局对象并通过AppWidgetManager的updateAppWidget(int appWidgetId, RemoteViews
remoteViews)方法通知AppWidgetService对象用RemoteViews对象更新appWidgetId所对应的AppWidget.
(2) AppWidgetService接收到了appWidgetId和RemoteViews后,通过appWidgetId查找已经被添加到Launcher的LauncherAppWidgetHostView布局对象,并RemoteViews中的布局更新到LauncherAppWidgetHostView布局对象中。 AppWidget显示在Launcher中。
分享到:
相关推荐
【App Widget加载流程】 1. **添加Widget**: 用户从应用程序抽屉选择Widget,并将其拖放到主屏幕上。此时,Android系统调用App Widget Provider的`onAddWidget()`方法。 2. **初始化布局**: 在`onAddWidget()`方法...
- `android:initialLayout="@layout/example_appwidget"`:指定了 Widget 加载时使用的布局文件。 - `android:minHeight="60dp"` 和 `android:minWidth="180dp"`:定义了 Widget 的最小尺寸。 - `android:...
`RemoteViews`通过从布局资源文件加载布局,为AppWidget提供了灵活性和可扩展性。 **支持的布局和组件:** 目前,`RemoteViews`支持的布局类型包括`FrameLayout`、`LinearLayout`和`RelativeLayout`。同时,它也...
import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; public class Example extends AppWidgetProvider { @Override public void onDeleted(Context ...
在本文中,我们将深入探讨如何在Android应用中实现视频播放,特别是在涉及到AppWidget(桌面小部件)时可能遇到的问题以及解决方案。 首先,我们要关注的核心组件是`VideoView`。`VideoView`是Android SDK提供的一...
【压缩包子文件的文件名称列表】:仅有一个名为“widget”的文件,这可能是一个包含关于“widget_WIDGET_”的源代码、配置文件、资源文件或者是其编译后的二进制文件。在实际开发中,通常会将相关文件组织成多个文件...
在`AndroidManifest.xml`中,你需要添加一个`<receiver>`标签来注册你的WidgetProvider,同时在`<intent-filter>`中声明`ACTION_APPWIDGET_UPDATE`动作,并使用`meta-data`标签指向`widget_demo_appwidget_info.xml...
3. `appwidget-provider.xml`配置:在`res/xml`目录下,创建`appwidget-provider.xml`文件,用于定义小部件的元数据,如最小宽度、高度、更新频率等。 二、小部件生命周期 1. 小部件安装:当用户在主屏幕上添加小...
开发者需要确保Widget加载速度快,内存占用低,以提供流畅的用户体验。 10. **隐私与权限**: 和其他iOS应用一样,Widget也需要遵循隐私政策,例如请求必要的用户权限,如访问网络或本地数据。 这个压缩包中的...
通过研究和学习这个项目,你将更深入地理解Widget的开发流程。 总的来说,iOS Widget为开发者提供了新的交互方式,让用户能在不离开当前屏幕的情况下获取和操作信息。虽然这个特性自iOS 8以来就已经存在,但它仍然...
AppWidgetProvider需要在AndroidManifest.xml中注册,并监听ACTION_APPWIDGET_UPDATE、ACTION_APPWIDGET_DELETED等广播事件。 3. **布局文件**: 源码中会包含一个或多个XML文件,这些文件定义了Widget的UI结构,如...
总结来说,"widget"这个生鲜水果电商App源码展示了Apicloud平台在开发跨平台移动应用上的强大能力。通过Apicloud,开发者能够快速构建出功能完善的电商应用,同时保证了性能和用户体验。对于学习和研究移动应用开发...
通过查看这些文件,你可以更深入地了解Laravel中Widget的开发流程。 总的来说,Laravel的Widget是一种强大的工具,它允许开发者创建可复用的视图组件,提高代码的可维护性和效率,同时保持界面设计的一致性。在实际...
- 小部件的添加和删除也是通过BroadcastReceiver监听APPWIDGET_ACTION_APPWIDGET_DELETED和APPWIDGET_ACTION_APPWIDGET_ADDED广播来实现的。 6. **动画与效果** - Android的Transition动画库在Launcher 2中用于...
总的来说,基于Flutter构建的新闻App结合了Widget系统、状态管理、数据持久化、网络请求、导航和用户界面设计等多个关键知识点,展现了Flutter的强大功能和高效开发流程。随着 Flutter 社区的不断发展,更多的库和...
本篇文章将深入探讨如何使用Flutter构建一款婚恋交友App,帮助开发者了解在JavaScript开发背景下,转向Flutter进行移动应用开发的流程和关键点。 一、Flutter基础与特性 Flutter以其Dart语言为开发基础,Dart是...
- `<appwidget>`标签用于定义桌面组件(Widget)。 - `launcher:className`指定Widget提供者的类名。 - `launcher:packageName`指定Widget提供者的包名。 #### 配置示例 ```xml launcher:className=...
#### 三、资源文件的加密与加载流程 在AppCan开发的应用中,为了保证应用的安全性和防止代码被轻易窃取,AppCan提供了一种加密机制,可以对HTML、CSS和JS文件进行加密处理。加密后的文件只有在运行时才能被解密并...
### 移动APP测试的22条军规 #### 一、设备和平台 1. **操作系统**:针对不同的操作系统(如iOS、Android),需要确保应用程序能够在这些平台上正常运行,并且能够兼容各种版本的操作系统。 2. **设备硬件**:考虑到...