Widgets基础篇(下)

文章翻译整理自:http://developer.android.com/guide/topics/appwidgets/index.html
八,如何编写App Widget Configuration Activity
如果你想让用户在添加一个新的App Widget时,能对该App Widget进行一些个性化的配置的话,你可以通过编写一个 App Widget Configuration Activity 来实现。在用户添加一个新的App Widget时, configuration Activity能够自动被App Widget host启动
在该Activity中,你可以让用户对App Widget进行一些个性化的设置,比如颜色,大小,更新频率以及其他的一些设置。
configuration Activity应该像一般的Activity一样,在Android manifest文件中进行申明。App Widget host是通过 ACTION_APPWIDGET_CONFIGURE  action 来启动configuration Activity 所以configuration Activity必须要能接收该Action.
比如, 示例4
示例4
<activity android:name=".ExampleAppWidgetConfigure">
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
    </intent-filter>
</activity>
同时在AppWidgetProviderInfo XML文件中,你也必须使用 android:configure 属性中指明:当用户在添加一个新的App Widget时,哪个Configuration Activity将被启动。具体可以参照 示例5
示例5:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    android:configure="com.example.android.ExampleAppWidgetConfigure" 
    ... >
</appwidget-provider>
注意: 这里的Activity用的是完整的名字,因为它将在你的APK包外被引用。
以上就是启动一个Configuration Activity,所有需要你做的。现在你需要关心的是Activity本身,在实现一个Configuration Activity时,你需要记住两件非常重要的事情。
首先 App Widget host调用configuration Activity,configuration Activity应该总是能返回一个执行结果。返回结果应该包含同过Intent传给configuration Activity的要添加的App Widget的ID(该ID通过EXTRA_APPWIDGET_ID保存在Intent的extras中)
其次 ,如果我们App Widget的有configuration Activity,那么当App Widget被创建时,AppWidgetProvider的onUpdate()方法将不会被调用,(当configuration Activity被创建启动的时候,系统将不再发送 ACTION_APPWIDGET_UPDATE 广播)。当App Widget被创建的时候,configuration Activity必须负责请求AppWidgetManager对App Widget进行首次更新。然而以后只要更新时间到了,系统还是会发送 ACTION_APPWIDGET_UPDATE 广播,因此App Widget的 onUpdate() 方法还是会被调用,以进行App Widget更新。系统只是在App Widget被创建的时候,不发送ACTION_APPWIDGET_UPDATE广播。
在后面的文章,我们将讲述如何在configuration Activity中返回执行结果和更新App Widget.
九、如何在configuration Activity中更新App Widget和返回结果
configuration Activity必须负责请求AppWidgetManager对App Widget进行的首次更新。你可以通过 AppWidgetManager 直接来更新App Widget.
以下是 在configuration Activity中更新App Widget和退出 configuration Activity的主要步骤:
第一、在启动 configuration Activity的Intent中得到App Widget的ID。比如, 示例6 .
示例6:
Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras != null) {
    mAppWidgetId = extras.getInt(
            AppWidgetManager.EXTRA_APPWIDGET_ID, 
            AppWidgetManager.INVALID_APPWIDGET_ID);
}
第二、进行App Widget配置的处理。
第三、当App Widget的配置事务被处理完后,调用来 AppWidgetManager.getInstance(context) 得到AppWidgetManager的一个实例。
比如, 示例7 .
示例7
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
第四、调用 updateAppWidget(int, RemoteViews)函数, 通过RemoteViews对象来更新App Widget.比如,示例8。
示例8:
RemoteViews views = new RemoteViews(context.getPackageName(),
R.layout.example_appwidget);
appWidgetManager.updateAppWidget(mAppWidgetId, views);
第五、把执行结果放在Intent,用Intent返回结果,并结束configuration Activity。比如,示例9
示例9:
Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
setResult(RESULT_OK, resultValue);
finish();
注意 configuration Activity首次启动的时候,应该把Activity的返回结果设置为RESULT_CANCELED.
这样如果用户中途退出了configuration Activity的话,系统将通知App Widget host该configuration被取消,这样App Widget将不被添加

你可能感兴趣的:(android,xml,null,action)