天天看點

App Widget

開發APP Widget的步驟

1、繼承AppWidgetProvider類,

一般在onUpdate中進行widget中按鍵的事件處理,和初始化值。

2、AppWidgetProvider是一個Broadcast,需要在Mainfest.xml中注冊。

   3、 <meta-data>中的android:resource引用的是Widget的配置檔案,需要在res/xml下建立,如果xml目錄不存在,也需要建立。

 widget_config檔案

設定了updatePeriodMillis後,就算手機處于待機狀态,也會喚醒手機去執行更新操作,如果widget更新頻繁,這會對手機電池壽命造成影響,是以針對這種情況,可以使用AlarmManager來執行定時更新操作,将AlarmManager的Type設定為 ELAPSED_REALTIME 或者 RTC,就可以保證手機在喚醒的狀态下執行更新,updatePeriodMillis則需要設定為0。

在桌面顯示的布局檔案的跟節點必須是常用布局例如:Framelayout,linearLayout,viewStub等,不能使用自定義布局。

在4.0以後的版本,widget放置到桌面上是可以根據其他的widget或者快捷圖示來擴充邊距,使添加的widget能夠在桌面視覺上達到協調,但是4.0以下的版本需要自己來設定Padding,使widget能和其他桌面圖示達到視覺協調。

做完以上的操作,一個簡單的widget的就完成了,根據應用需求我們會遇到以下的一些情況。

一、相應widget的按鍵事件

    因為widget不是運作在自身的應用的程序中,是以是通過以下方式來處理事件。

  RemoteView 進行布局引用。

   PendingIntent  進行事件分發。

  在onReceive()的處理

二、widget添加上桌面上時的配置頁面

這個配置頁面是一個activity,是以需要在mainfest.xml中進行配置

1、在啟動這個配置頁面的時候,需要在oncreate()方法裡面寫上setResult(RESULT_CANCELED);這樣做是為了防止配置頁面還沒有顯示出來,使用者就按了傳回鍵,

2、需要擷取widgetId

如果mAppWidgetId為INVALID_APPWIDGET_ID則退出頁面顯示。

3、當配置頁面顯示後,使用者做完了配置退出頁面時,需要将這些配置資訊更新到桌面的widget,照着官方給出的文檔上來操作的話,隻能顯示widget但是配置并沒有生效,參考了appdemo中的例子和個人調試後總結如下。

在MyWidget中寫一個靜态方法

在配置界面的退出方法中這樣寫

當時參考文檔做時,文檔中并沒有提到調用updateAppWidget方法後,退出界面需要重新擷取view,并改變view的顯示資料。是以我隻寫了appWidgetManager.updateAppWidget(appWidgetId, views)方法。

繼續閱讀