編輯:初級開發
首先我們需要在androidmanifest.XML文件中加入receiver節點來接收系統廣播,聲明BroadcastReceiver類的方法可以直接使用intent filter來過濾系統信息,下面來自SDK中的寫法。
<receiver android:name="TestAppWidgetProvider" android:label="@string/cwj" android:icon="@drawable/smart_icon">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> //這裡我們需要捕獲的是APPWIDGET_UPDATE這個動作
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@XML/appwidget_info" /> //定義meta數據,見下面的appwidget-provider
</receiver>
我們定一個AppWidgetProviderInfo 結構,用來描述這個widget的外觀,這裡和layout的布局有些相似,可以設置最小的寬度為40dp,最小高度為30dp。
<appwidget-provider XMLns:android="http://schemas.android.com/apk/res/android" android:minWidth="40dp"
android:minHeight="30dp"
android:updatePeriodMillis="86400000" //回調Timer,單位為毫秒。這裡是1天=60X60X24X1000,android手機的電能有限,頻率不能太高,最好讓用戶自己控制
android:initialLayout="@layout/test_appwidget" //初始化時的主要布局
android:configure="com.android.tests.appwidgethost.TestAppWidgetConfigure" >
</appwidget-provider>
在Widget中主要使用AppWidgetProvider做基類,剛才我們定義的BroadcastReceiver主要是更新動作ACTION_APPWIDGET_UPDATE ,與此之外還有ACTION_APPWIDGET_DELETED、ACTION_APPWIDGET_ENABLED和ACTION_APPWIDGET_DISABLED分別表示刪除是、啟用和禁用時觸發的事件,這裡是系統廣播。我們通過 BroadcastReceiver類的onReceive方法來捕獲。
下面的Java廣播動作獲取代碼如下:
public void onReceive(Context context, Intent intent) {
String action = intent.getAction(); //獲取當前的動作
if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) { //如果是ACTION_APPWIDGET_UPDATE動作則
Bundle extras = intent.getExtras();
if (extras != null) {
int[] appWidgetIds = extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS);
if (appWidgetIds != null && appWidgetIds.length > 0) {
this.onUpdate(context, AppWidgetManager.getInstance(context), appWidgetIds);
}
}
}
else if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) { //動作2
Bundle extras = intent.getExtras();
if (extras != null) {
int[] appWidgetIds = extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS);
if (appWidgetIds != null && appWidgetIds.length > 0) {
this.onDeleted(context, appWidgetIds);
}
}
}
else if (AppWidgetManager.ACTION_APPWIDGET_ENABLED.equals(action)) { //動作3
this.onEnabled(context);
}
else if (AppWidgetManager.ACTION_APPWIDGET_DISABLED.equals(action)) { //動作4
this.onDisabled(context);
}
}
本文我們主要簡單的講述下android平台Widget的框架,以後我們將會通過實際的例子來講解,我們看到這裡的widget和常見的iphone上dashboard等w3c使用Html+JS以AJax方式的小工具不太一樣,不過整體開發起來比android標准的程序更簡單,主要是考慮ui的繪制以及網絡通訊,推薦大家多看看apache通訊類。
l 使用Intent物件雖然透過Intent並非最快速,但卻是最有彈性的。無論是同一進程或是跨進程的溝通都可以使用它。例如:/* ===== EX-02 ======
GridVIEw[功能]以前提及過GridView 說也是一種AdapterView 和ListVIEw有點像 今天花了時間 用了一些 有點心得 和大家分享分享[思路]
還是要重申一遍,因為只是轉化,所以原J2ME的問題,我不會進行修改。所以這個游戲還是那個樣,各種不搭,非常不搭。。。因為實例需要,我在androidSprite中添加了
Notification通知界面可以用自己定義的界面來顯示。下面是我實現的帶進度條的通知效果下面是主要實現部分代碼,比較簡單直接看代碼可以了。Java代碼nf =new