App Widget(Application Widget)第一講(Android學習隨筆十)

來源:互聯網
上載者:User

 

App Widget(Application Widget)的實現步驟:

 

a、建立AppWidgetProvider對象,通過使用XML(appwidgetinfo.xml)來定義:

 

view

<?xml version="1.0" encoding="utf-8"?> 

<appwidget-provider 

  xmlns:android="http://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="http://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="http://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的專欄

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.