App Widget(Application Widget)的實現步驟:
a、創建AppWidgetProvider對象,通過使用XML(appwidgetinfo.xml)來定義:
view
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
xmlns:android="https://schemas.android.com/apk/res/android"
android:minWidth="294dp"
android:minHeight="72dp"
android:updatePeriodMillis="86400000"
android:initialLayout="@layout/awl"
>
</appwidget-provider>
定義瞭AppWidget的最小寬度、最小高度、更新周期和AppWidget的初始佈局。
其中AppWidget的初始佈局文件(awl.xml)為如下:
view
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextView android:id="@+id/tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="test"/>
<Button android:id="@+id/btn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="click"/>
</LinearLayout>
b、實現AppWidgetProvider類(AWTProvider.java):
view
package yc.yc;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;
public class AWTProvider extends AppWidgetProvider {
//每當一個AppWidget被刪除,就會調用onDeleted方法。
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
System.out.println("delete");
super.onDeleted(context, appWidgetIds);
}
//當最後一個AppWidget被刪除,就會調用onDisabled方法。
//在此方法中一般情況下執行一些AppWidget的結束性操作,如刪除一個臨時數據庫等操作。
@Override
public void onDisabled(Context context) {
System.out.println("disable");
super.onDisabled(context);
}
//當第一個AppWidget實例被創建是,就會調用onEnabled方法。
//在此方法中一般情況下執行一些AppWidget的初始化的工作,如新建一個數據庫或者一些操作等。
@Override
public void onEnabled(Context context) {
System.out.println("enable");
super.onEnabled(context);
}
//onReceive相當一個經理,當外界來任務瞭,將任務分發給其下的員工(onEnable,onDeleted,onDisabled,onUpdate)處理
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("receive");
super.onReceive(context, intent);
}
//在這裡onUpdate執行的條件有兩個:1、到瞭我們所設定的更新周期瞭;2、添加一個新的AppWidget。
//在onUpdate中一般為控件定義事件處理或者開啟一個臨時的Service。
//這裡是為我們的button控件添加點擊事件處理
//context表示這個接收器正在運行的環境
//appWManager表示AppWidget的管理器可通過調用updateAppWidget(ComponentName, RemoteViews)更改指定AppWidget的控件屬性
//appWidgetIds表示Appwidget的編號,系統自動生成
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
System.out.println("update");
final int N = appWidgetIds.length;
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
System.out.println("appWidgetId="+appWidgetId);
Intent intent = new Intent(context, AWTActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.awl);
views.setOnClickPendingIntent(R.id.btn, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
}
C、在AndroidManifest.xml中註冊實現類,並且定義元數據:
view
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="yc.yc"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="7" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".AWTActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!– 註冊實現類–>
<receiver android:name=".AWTProvider">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
<!– 定義元數據–>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/appwidgetinfo"/>
</receiver>
</application>
</manifest>
註意:這隻是AppWidget的第一講,還有後續的課程。
摘自 tianshijianbing1989的專欄