App widget demo

        想写个appWidget的玩玩,下面简单的写个demo,在Settings apk的工程中添加demo。步骤如下。

1 写一个类,继承于AppWidgetProvider

package com.android.settings.widget;

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.content.res.Resources;
import android.os.Environment;
import android.view.View;
import android.widget.RemoteViews;
import com.android.settings.R;


public class DisplaySettingsAppWidgetProvider extends AppWidgetProvider {
    static final String TAG = "DisplaySettingsWidgetProvider";  
    public static final String CMDAPPWIDGETUPDATE = "appwidgetupdate";

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        defaultAppWidget(context, appWidgetIds);
        
    }
    
    private void defaultAppWidget(Context context, int[] appWidgetIds) {
        final Resources res = context.getResources();
        /*获取widget的布局,那么我们将可以对其做任何下做的操作了,包括监听、改变状态等
        */
        final RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.display_widget);           
        pushUpdate(context, appWidgetIds, views);
    }
    //更新显示啦
    private void pushUpdate(Context context, int[] appWidgetIds, RemoteViews views) {
        // Update specific list of appWidgetIds if given, otherwise default to all
        final AppWidgetManager gm = AppWidgetManager.getInstance(context);
        if (appWidgetIds != null) {
            gm.updateAppWidget(appWidgetIds, views);
        } else {
            gm.updateAppWidget(new ComponentName(context, this.getClass()), views);
        }
    }
    
}


    AppWidgetProvider继承于BroadcastReceiver,用于写appWidget的基类,主要提供的方法如下:

void onDeleted(Context context, int[] appWidgetIds)
当AppWidget在桌面创建的图标被删除的时候, 响应  ACTION_APPWIDGET_DELETED  的broadcast广播消息。
void onDisabled(Context context)
当AppWidget在桌面创建的最后一个图标被删除的时候,
响应  ACTION_APPWIDGET_DISABLED  的broadcast广播消息。
void onEnabled(Context context)
当一个 AppWidget在桌面创建图标的时候,
响应 ACTION_APPWIDGET_ENABLED  的broadcast广播消息。
   
void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
Called in response to the  ACTION_APPWIDGET_UPDATE broadcast
 when this AppWidget provider is being asked to provide  RemoteViews for a set of AppWidgets. 
Override this method to implement your own AppWidget functionality.

2 在AndroidManifest.xml中添加声明

        
            
                
            
            
        

       在前面的介绍中,我们知道,AppWidgetProvider是继承于BroadcastReceiver的,那么必须在AndroidManifest文件中对其进行声明

而对于action的设置,可以根据自己的需求来设置了,这里的demo我只设置了 ACTION_APPWIDGET_UPDATE ,只接收update广播消息。

对于元素,主要是设置AppWidgetProviderInfo :

  • android:name - Specifies the metadata name. Use android.appwidget.provider to identify the data as the AppWidgetProviderInfo descriptor.
  • android:resource - 用于描述 AppWidgetProviderInfo 的本地xml文件,请看第三步,对该xml文件的介绍

3. display_appwidget_info.xml定义


我们主要看两个属性:

android:previewImage:从名字也将可以看出,这个是预览的图标,在桌面的“窗口小部件”中看到的预览图

android:initialLayout: 指定widget的布局文件啦


4. 显示布局display_widget.xml

     widget的显示布局文件,这里只简单定义了Button组件。



 

ok,非常简单的widget搞定了。




你可能感兴趣的:(android)