MainWidget类继承AppWidgetProvider,实现了它的四个方法,onReceive()、onUpdate()、onDeleted()、onEnabled()、onDisabled();当启动widget时,调用方法的顺序为:onReceive、onEnabled、onReceive、onUpdate;下载widget时,调用方法的顺序为:onReceive、onDeleted、onReceive、onDisabled;启动的时候,在桌面长按鼠标左键,然后选在里面的widgets,进去后点击自己写的widget;
MainWidget类:
package jxaly.yj;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class MainWidget extends AppWidgetProvider {
// 每个请求都会传递给onReceive方法,该方法根据Intent参数中的action类型来决定自己处理还是分发给下面四个特殊的方法。
@Override
public void onReceive(Context context, Intent intent) {
Log.i( " yao " , " WidgetProvider --> onReceive " );
super .onReceive(context, intent);
}
// 如果Widget自动更新时间到了、或者其他会导致Widget发生变化的事件发生,或者说Intent的值是android.appwidget.action.APPWIDGET_UPDATE,那么会调用onUpdate,下面三个方法类似
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int [] appWidgetIds) {
// AppWidgetManager 顾名思义是AppWidget的管理器,appWidgetIds 桌面上所有的widget都会被分配一个唯一的ID标识,那么这个数组就是他们的列表
Log.i( " yao " , " WidgetProvider --> onUpdate " );
super .onUpdate(context, appWidgetManager, appWidgetIds);
}
// 当一个App Widget从桌面上删除时调用
@Override
public void onDeleted(Context context, int [] appWidgetIds) {
Log.i( " yao " , " WidgetProvider --> onDeleted " );
super .onDeleted(context, appWidgetIds);
}
// 当这个App Widget第一次被放在桌面上时调用(同一个App Widget可以被放在桌面上多次,所以会有这个说法)
@Override
public void onEnabled(Context context) {
Log.i( " yao " , " WidgetProvider --> onEnabled " );
super .onEnabled(context);
}
// 当这个App Widget的最后一个实例被从桌面上移除时会调用该方法。
@Override
public void onDisabled(Context context) {
Log.i( " yao " , " WidgetProvider --> onDisabled " );
super .onDisabled(context);
}
}
上面这个类只是实现了父类的方法,但是方法体里没有添加任何代码(除了Log语句)
main.xml:
<? xml version="1.0" encoding="utf-8" ?>
< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"
android:orientation ="vertical"
android:layout_width ="fill_parent"
android:layout_height ="fill_parent"
>
< TextView
android:layout_width ="fill_parent"
android:layout_height ="wrap_content"
android:text ="Widget Demo"
android:gravity ="center" android:textColor ="#93ef02" />
</ LinearLayout >
然后在res文件夹下面创建了一个名为xml的文件夹,里面放了一个provider_info.xml
<? xml version="1.0" encoding="utf-8" ?>
< appwidget-provider
xmlns:android =http://schemas.android.com/apk/res/androidandroid:minWidth ="294dp" android:updatePeriodMillis ="86400000"android:minHeight ="72dp" android:initialLayout ="@layout/main" >
</ appwidget-provider >
最后还得在AndroidMainfest.xml配置一下,以让java文件和provider_info.xml关联
<? xml version="1.0" encoding="utf-8" ?>
< manifest xmlns:android ="http://schemas.android.com/apk/res/android"
package ="jxaly.yj"
android:versionCode ="1"
android:versionName ="1.0" >
< application android:icon ="@drawable/icon" android:label ="@string/app_name" >
< receiver android:name ="MainWidget" >
< intent-filter >
< action android:name ="android.appwidget.action.APPWIDGET_UPDATE" ></ action >
</ intent-filter >
< meta-data android:resource ="@xml/provider_info" android:name ="android.appwidget.provider" ></ meta-data >
</ receiver >
</ application >
</ manifest >
运行效果图: