App Widgets是小型views,可以嵌入到其他应用程序并且接收定期更新。这些views被称为Widgets组件,您可以通过App Widget provider去发布Widgets,能够容纳其他App Widgets称为App Widget host。
创建一个Widget ,你需要:
AppWidgetProviderInfo object
描述一个App Widget,如App Widget的布局,更新频率,以及AppWidgetProvider类的metadata。这在XML中定义。
AppWidgetProvider class implementation
在代码层次实现能与基于广播机制事件的App Widget进行交互的基本方法。通过它,当App Widget更新,启用,禁用和删除的时候就能收到广播。
View layout
通过XML定义的App Widget初始化布局。
另外,可以实现一个配置App Widget的Activity 。 这个可选的Activity 是当用户添加App Widget的时候打开 ,允许用户在创建时候去对App Widget 配置。
下面介绍一下怎么去使用这些组件:
一、在AndroidManifest.xml中声明App Widget
<receiver android:name="ExampleAppWidgetProvider" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/example_appwidget_info" />
</receiver>
<receiver>需要android:name属性,它指定App Widget所使用的AppWidgetProvider。
<intent-filter>需要含android:name 属性的<action>,这个属性指定AppWidgetProvider接收ACTION_APPWIDGET_UPDATE广播,这是唯一一个需要明确声明的广播。当需要时,AppWidgetManager自动给所有App Widget发送广播。
<meta-data>指定了AppWidgetProviderInfo资源,需要以下属性:
android:name – 指定metadata的名字。使用android.appwidget.provider将其作为AppWidgetProviderInfo的描述性数据。
android:resource - 指定AppWidgetProviderInfo资源的位置。
二、增加AppWidgetProviderInfo Metadata
一个App Widget的基本属性是通过AppWidgetProviderInfo去定义的,例如它的最小尺寸的布局,它的初始layout,多久更新App Widget,还有(可选)在创建时期的一个配置Activity。在XML资源中定义一个AppWidgetProviderInfo是通过<appwidget-provider>标签,并保存在工程的res/xml/文件夹底下。例如
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="294dp"
android:minHeight="72dp"
android:updatePeriodMillis="86400000"
android:initialLayout="@layout/example_appwidget"
android:configure="com.example.android.ExampleAppWidgetConfigure" > </appwidget-provider>
updatePeriodMillis 属性定义了App Widget应该多久向AppWidgetProvider请求更新。实际更新的时间未必能保证及时更新,并且建议尽量不要频繁更新---比如一小时一次去更新电量。也可以容许用户去自定义更新的时间。
configure 属性是当用户添加一个App Widget前启动的Activity,这个Activity的作用就是配置App Widget的属性。(Optional)
三、为App Widget定义Layout
只要你熟悉用xml怎么去定义layout的话,为App Widget定义一个layout还是很简单的。但是由于App Widget的布局是基于RemoteViews,所以只能使用RemoteViews所支持的layout或者view。
RemoteViews支持的layout和view如下:
Layout – FrameLayout LinearLayout RelativeLayou
View -- AnalogClock Button Chronometer ImageButton ImageView ProgressBar TextView
注意:继承这些类的子类同样不支持。
四、使用AppWidgetProvider
AppWidgetProvider是BroadcastReceiver的子类,这个类处理App Widget广播。AppWidgetProvider只接收于App Widget有关系的广播,比如App Widget在updated, deleted, enabled, and disabled。当这些广播发生的时候,AppWidgetProvider会调用一下回调方法:
onUpdate(Context, AppWidgetManager, int[])
间隔调用此方法去更新App Widget,间隔时间的设置是在AppWidgetProviderInfo下的updatePeriodMillis属性,同样当用户添加App Widget的时候也被调用。如果你已经声明了一个configuration Activity,用户添加App Widget的时候就不会调用onUpdate,但是在随后的更新中依然会被调用。
onDeleted(Context, int[])
当App Widget 从App Widget host 中删除的时候调用。
onEnabled(Context)
当App Widget第一次创建的时候调用。比如,当用户增加两个同样的App Widget时候,这个方法只在第一次去调用。如果你需要打开一个新的数据库或者其他的设置,而这在所有的App Widgets只需要设置一次的情况下,这个是最好的地方去实现它们。
onDisabled(Context)
当App Widget的最后一个实例从App Widget host中被删除的时候调用。这里可以做一些在onEnabled(Context)中相反的操作,比如删除临时数据库。
onReceive(Context, Intent)
每一个广播的产生都会调用此方法,而且是在上面方法之前被调用。通常不需要实现此方法。
在AppWidgetProvider中最重要的callback就是onUpdated(),如果你的App Widget接收用户交互事件,就需要在这个callback里面进行处理。
如果你需要一个带有Button的App Widget,点击Button去启动一个Activity,下面就是AppWidgetProvider的实现方法:
public class ExampleAppWidgetProvider extends AppWidgetProvider {
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
final int N = appWidgetIds.length;
// Perform this loop procedure for each App Widget that belongs to this provider
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
// Create an Intent to launch ExampleActivity
Intent intent = new Intent(context, ExampleActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
// Get the layout for the App Widget and attach an on-click listener to the button
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider_layout);
views.setOnClickPendingIntent(R.id.button, pendingIntent);
// Tell the AppWidgetManager to perform an update on the current App Widget
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
}
五、创建App Widget Configuration Activity
这个Activity将通过App Widget自动启动,用户可以给App Widget设置有用的参数,比如App Widget的颜色、大小、更新时间或者其他的属性。
在AndroidManifes.xml中定义这个Activity和一般定义Activity基本没有区别,App Widget host启动这个Activity需要一个Action,所以:
<activity android:name=".ExampleAppWidgetConfigure">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
</intent-filter>
</activity>
同样这个Activity必须在AppWidgetProviderInfo XML文件中定义android:configure。
值得注意的是App Widget host调用configuration Activity,configuration Activity必须要返回一个结果(必须包含App Widget ID)saved in the Intent extras as EXTRA_APPWIDGET_ID
六、通过configuration Activity去更新App Widget
1. 获取App Widget ID
Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras != null) {
mAppWidgetId = extras.getInt(
AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
}
2. 设置 App Widget 参数
3. 当设置完成,通过getInstance(Context)获取AppWidgetManager实例AppWidgetManager appWidgetManager=AppWidgetManager.getInstance(context);
4. 通过调用updateAppWidget(int, RemoteViews)去更新App Widget
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.example_appwidget);
appWidgetManager.updateAppWidget(mAppWidgetId, views);
5. 创建一个返回的Intent,结束Activity
Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
setResult(RESULT_OK, resultValue);
finish();
分享到:
相关推荐
本篇文章将深入探讨如何使用`appWidget`来启动一个`Activity`。 首先,我们需要了解`appWidget`的基本构成。一个`appWidget`通常包含一个或多个`RemoteViews`,它们是显示在主屏幕上的视图组件。`RemoteViews`允许...
在深入探讨Android AppWidget之前,我们首先需要理解AppWidget在Android生态中的角色和价值。AppWidget,即桌面小部件,是Android系统提供的一种允许应用程序在主屏幕放置动态更新的组件,用户无需打开完整应用即可...
首先,我们需要理解AppWidget的基础结构。一个AppWidget由两部分组成:AppWidget提供者(AppWidgetProvider)和布局文件。AppWidget提供者是Android的BroadcastReceiver子类,它负责处理AppWidget的生命周期事件,如...
2. **AppWidgetInfo**: 这是Android系统用来存储关于AppWidget的元数据,包括其大小、名称和指向AppWidget提供者类的引用。开发者在XML布局文件中定义AppWidgetInfo。 3. **布局文件**: AppWidget的界面由XML布局...
本文将深入探讨Android AppWidget的第四部分,主要关注如何更新AppWidget中的控件,以及相关的源码和工具。 **一、AppWidget更新机制** 1. **AppWidgetProvider**: 这是所有AppWidget的核心组件,它是一个...
在Android开发中,AppWidget是桌面小部件,它允许开发者将应用程序的功能直接集成到用户的主屏幕上,无需打开应用。在本案例中,我们探讨...通过源码学习,可以深入理解这些组件的协同工作方式,提升Android开发技能。
本教程将深入探讨如何通过实例来验证一个Android AppWidget的创建和使用。 首先,我们来看`AndroidManifest.xml`文件,它是Android应用的核心配置文件,包含应用的基本信息以及所有组件(如Activity、Service、...
这个压缩包“Android -- AppWidget源码.zip”很可能是包含了Android AppWidget的相关源代码,帮助开发者深入理解其工作原理和实现机制。 AppWidget主要由以下几个关键组件组成: 1. **AppWidgetProvider**: 这是...
在"appwidget"这个压缩包文件中,可能包含了示例代码和资源文件,供开发者学习如何实现上述功能。通过研究这些文件,你可以更好地理解App Widget的工作原理和实现细节,从而在自己的项目中创建出富有特色的桌面小...
1. **AppWidget提供者(AppWidget Provider)**:这是定义AppWidget行为的组件,负责处理与AppWidget相关的广播事件,如添加、删除或更新小部件。 2. **布局文件(Layout)**:定义了小部件在主屏幕上的外观。可以...
本文将深入探讨AppWidget的相关知识点,并通过一个实际的AppWidgetProviderDemo4.28来展示其工作原理和实现方法。 首先,我们要了解AppWidget的基本结构。一个AppWidget由以下几个主要部分组成: 1. **...
在本篇博文中,我们将深入探讨如何在AppWidget中启动一个新的Activity,这通常是为了提供更丰富的用户体验或者执行更复杂的任务。 首先,让我们了解AppWidget的基本结构。一个AppWidget由一个或多个`RemoteViews`...
在本文中,我们将深入探讨AppWidget的基本概念、工作原理以及如何创建一个简单的AppWidget。 1. **AppWidget的基本概念** - AppWidget并非独立的应用程序,而是主应用的一部分,通过`AppWidgetProvider`类与宿主...
通过分析这个源码示例,开发者可以深入了解AppWidget的工作原理和实际应用,从而提高自己在Android开发中的技能,尤其是对于那些希望创建具有个性化和实用性的桌面小部件的开发者来说,这将是一个非常有价值的参考...
本教程将深入探讨如何创建和实现一个基本的Android AppWidget。 首先,我们需要了解AppWidget的构成。一个AppWidget通常由以下几个部分组成: 1. **布局文件**:这是定义AppWidget外观的XML文件,类似于Activity的...
通过研究这个源码压缩包,开发者可以深入了解AppWidget的工作原理,学习如何设计和实现具有交互功能的桌面小部件,从而丰富自己的Android应用。同时,理解并掌握这些知识点对于提升Android应用的用户体验和创新性至...
Android AppWidget是Android系统提供的一种桌面小部件功能,允许开发者创建可以放置在用户主屏幕上的小型应用程序。...因此,深入理解和实践"android appwidget 经典完整代码"对于Android开发者来说是非常有价值的。
本文将深入探讨AppWidget的基本概念、工作原理及其创建过程。 ### 1. AppWidget概述 AppWidget是Android系统桌面环境的一部分,它们是可定制的、轻量级的UI元素,可以直接在主屏幕上显示。用户可以自由地添加、...
本文将深入探讨如何在AppWidget中自定义Action广播,以便更好地控制和扩展小部件的行为。 首先,让我们了解什么是BroadcastReceiver。在Android系统中,BroadcastReceiver是一种组件,它监听系统或应用发出的广播...
AppWidget是Android系统提供的一种可以在桌面展示的小部件,它允许用户在主屏幕上放置应用程序的快捷方式或者小型交互式UI,...通过深入研究和扩展这个示例,你可以掌握更多的技巧,打造出更加丰富的AppWidget应用。