App Widgets

app widget 是一个迷你的application 视图,可以被嵌入到其他应用中,例如放到桌面上.可以定期的更新UI。可以包换其他app widget的application叫做app widget host.
定义一个app widget,你需要做下面三步。
新建一个appWidgetProvideInfo 对象:描述app widget的元数据,例如app widget的布局,更新频率。APPWidgetProvideInfo 应该在想xml文件中.
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="40dp"
    android:minHeight="40dp"
    android:updatePeriodMillis="86400000"
    android:previewImage="@drawable/preview"
    android:initialLayout="@layout/example_appwidget"
    android:configure="com.example.android.ExampleAppWidgetConfigure"
    android:resizeMode="horizontal|vertical"
    android:widgetCategory="home_screen">
</appwidget-provider>
新建一个APPWidgetProvide 类,定义APPWidget 提供的基本功能,一般是brodcast的子类,可以解释appwidget的更新/使能/删除广播.一般在manifest文件中定义,如下所示
<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>

AppWIdgetProvide是BroadCastReceive的子类来接受app widget的广播信息.


void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions)


void onDeleted(Context context, int[] appWidgetIds)


void onDisabled(Context context)


void onEnabled(Context context)


void onReceive(Context context, Intent intent)


void onRestored(Context context, int[] oldWidgetIds, int[] newWidgetIds)


void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)


如下这个例子只实现了onUpdate方法.


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 是继续remoteView的,因此只支持FrameLayout/LineLayout/RelativeLayout/GridLayout.可以用的组件为 


AnalogClock/Button/chronometer/ImageButton/ImageView/ProcessBar/TextView/viewFlipper/ListView/GridView/StackView/AdapterVidwFliper。


可以创建一个app widget configuration Activity来帮忙用户在创建app widget客制化。这个Activity 会自动的装载app widget host,用于用在创建app widget是进行配置,如app widget的颜色,大小。和更新的周期.
这个Activity 必须在manifest文件中添加
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/>
    </intent-filter>
而且必须在APPWidgetPrividerInfo的XML中添加android:configure 属性,致命配置的Activity
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    android:configure="com.example.android.ExampleAppWidgetConfigure"
    ... >
</appwidget-provider>
1:在这个Activity中必须先拿到appwidgetID:
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:获取APPWidgetManager
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
4:更新app widget
RemoteViews views = new RemoteViews(context.getPackageName(),
R.layout.example_appwidget);
appWidgetManager.updateAppWidget(mAppWidgetId, views);
发送:
5:发送intent
Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
setResult(RESULT_OK, resultValue);
finish();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值