Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 初級開發 >> android.appwidget類剖析

android.appwidget類剖析

編輯:初級開發

隨著android 1.5的普及很多網友發現SDK中多出了appwidget這個框架。作為使用Java語言設計的Widget相比目前主流的W3C Widget有更好的運行效率和底層控制能力,今天我們就android平台上的Widget開發做主要的講解。

  首先我們需要在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通訊類。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved