【Android】開發桌面小插件(三)

轉載自:http://www.eoeandroid.com/thread-71213-1-1.html


       這是我們這個小項目的最後一篇了,大家一定是非常期待的,那麼我們就來看看這最後一篇的內容吧。


       注意: 因爲這個AppWidgetProvider 是一個廣播接收器BroadcastReceiver,不能保證你的進程在回調函數返回後仍然繼續運行(參見應用程序基礎>廣播接收器的生命週期 Application Fundamentals > Broadcast Receiver Lifecycle以獲取更多信息)。如果你的App Widget設置過程能持續幾秒鐘(也許當執行網頁請求時)而且你要求你的進程繼續,考慮在onUpdated()方法裏啓動一個服務Service 。從這個服務裏,你可以執行自己的App Widget更新,而不必擔心AppWidgetProvider 由於一個應用程序無響應錯誤Application Not Responding (ANR)而關閉。參見Wiktionary sample's AppWidgetProvider,這是個App Widget運行一個Service的例子。

      同樣參見ExampleAppWidgetProvider.java 例子類。

  接收App Widget廣播意圖
  AppWidgetProvider 只是一個簡便類。如果你想直接接收App Widget 廣播,你可以實現自己的BroadcastReceiver 或者重寫 onReceive(Context, Intent) 回調函數。你需要注意的4個意圖如下:

Java代碼:

ACTION_APPWIDGET_UPDATE
ACTION_APPWIDGET_DELETED
ACTION_APPWIDGET_ENABLED
ACTION_APPWIDGET_DISABLED

        創建一個App Widget 配置活動

  如果你想讓用戶在添加一個新的App Widget時調整設置,你可以創建一個App Widget配置活動。這個活動將被App Widget宿主自動啓動並允許用戶在創建時配置可用的設置,比如App Widget顏色,尺寸,更新週期或者其它功能設置。

  這個配置活動應該在Android清單文件中聲明爲一個通用活動。不過,它將被通過ACTION_APPWIDGET_CONFIGURE活動而被App Widget宿主啓動,因此這個活動需要接受這個意圖。比如:

Java代碼:

< activity android:name=".ExampleAppWidgetConfigure">
< intent-filter>
< action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
< /intent-filter>
< /activity>

        同樣的,活動必須在AppWidgetProviderInfo XML 文件中聲明,通過android:configure屬性(參見上面的添加AppWidgetProviderInfo元數據Adding the AppWidgetProviderInfo Metadata)。比如,配置活動可以聲明如下:

Java代碼:

< appwidget-provider xmlns:android=http://schemas.android.com/apk/res/android
...
android:configure="com.example.android.ExampleAppWidgetConfigure"
... >
< /appwidget-provider>

      注意這個活動是用全名聲明的,因爲它將從你的程序包外被引用。

  這就是所有關於配置活動你一開始需要了解的。現在你需要一個真實的活動。這兒就有,不過,當你實現這個活動時記住兩件重要的事情:

  App Widget 宿主調用配置活動而且配置活動應該總是返回一個結果.這個結果應該包含這個通過啓動該活動的意圖傳遞的App Widget ID(以EXTRA_APPWIDGET_ID保存在意圖的附加段Intent extras中)

  當這個 App Widget 被創建時將不會調用onUpdate() 方法(當一個配置活動啓動時,系統將不會發送ACTION_APPWIDGET_UPDATE廣播).配置活動應該在 App Widget 第一次被創建時負責從AppWidgetManager請求一個更新.不過, onUpdate() 將在後續更新中被調用-只忽略第一次.

  參見下面章節的代碼片斷,該示例說明了如何從配置中返回一個結果並更新這個App Widget.

  從配置活動中更新一個App Widget
  當一個App Widget使用一個配置活動,那麼當配置結束時,就應該由這個活動來更新這個App Widget.你可以直接AppWidgetManager裏請求一個更新來這麼做.
  下面是恰當的更新App Widget 以及關閉配置活動這個過程的一個概要描述:

  1. 首先,從啓動這個活動的意圖中獲取App Widget ID:

Java代碼:

Intent intent = getIntent();
Bundle extras = intent.getExtras();

if (extras != null) {
mAppWidgetId = extras.getInt(
AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
}

        2. 實施你的App Widget 配置。
  3. 當配置完成後,通過調用getInstance(Context)獲取一個AppWidgetManager實例:

Java代碼:

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);

       4. 以一個RemoteViews佈局調用updateAppWidget(int, RemoteViews)更新App Widget:

Java代碼:

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.example_appwidget);
appWidgetManager.updateAppWidget(mAppWidgetId, views);

       5. 最後,創建返回意圖,設置活動結果,並結束這個活動:

Java代碼:

Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
setResult(RESULT_OK, resultValue);
finish();

       提示: 當你的配置活動第一次打開時,設置活動結果爲RESULT_CANCELED。這樣,如果用戶在結束之前從活動外返回,這個App Widget 宿主會接收到配置取消通知而不會添加這個App Widget。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章