1

我的應用程序支持每個此處列出how to add multiple widgets in one app?如何更新不同大小的小部件?

它具有處理所有的部件一個抽象類BaseWidgetProvider的方案通過多個尺寸部件。然後它被Android Manifest中列出的空WidgetProvider1/2/3/4類(每個大小一個)分類,並且一切正常。在清單看起來登記這樣的(典型的1..4)

<receiver 
    android:name=".widget.MyWidgetProvider4" 
    android:label="My Widget size 4" > 
    <intent-filter> 
     <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
    </intent-filter> 
    <intent-filter> 
     <action 
      android:name="my.domain.BaseWidgetProvider.UPDATE_WIDGET" /> 
    </intent-filter> 
    <meta-data 
     android:name="android.appwidget.provider" 
     android:resource="@xml/my_widget_info4" /> 
    </receiver> 

我的問題是關於從應用程序發送的意圖,用新數據更新的部件。我無法找到一個方法來發送一個意圖的所有4個供應商,我目前每次

for (Class cls : BaseWidgetProvider.WIDGET_PROVIDER_CLASSES) { 
    Intent intent = new Intent(mApp.context(), cls); 
    intent.setAction(BaseWidgetProvider.UPDATE_WIDGET); 
     this.sendBroadcast(intent); 
} 

其中

public static final Class[] WIDGET_PROVIDER_CLASSES = new Class[] { 
    WidgetProvider4.class, 
    WidgetProvider1.class, 
    WidgetProvider2.class, 
    WidgetProvider3.class  
}; 
  1. 這是送一個最好的方式發送4個獨立的意圖將意圖更新爲所有小部件大小(請注意,通常用戶只有零個或一個小部件)?

  2. 是否有合理的方式發送只有一個意圖?

  3. 有沒有辦法讓一個接收器更新所有四種尺寸的小部件實例?

請注意,基本提供程序類不關心小部件大小,對於所有大小都完全相同。唯一的區別是用戶屏幕上的初始小部件大小。如果用戶調整了窗口小部件的大小(例如使用Launcher Pro),它就可以正常工作。

+0

我試圖按照相同的鏈接多個大小的部件,但我無法得到如何實現基類的想法。我只是一個初學者在Android以及Java。因此,如果您可以發佈您的所有解決方案或您遵循的步驟,這將非常有幫助。這對我以及其他那些陷入這個問題的初學者來說都是非常有幫助的。 – Prativa 2012-11-28 05:09:19

回答

3

一個意圖添加動作意圖過濾器到所有清單文件,你的部件供應商的聲明,例如:

<intent-filter> 
     <action android:name="my.domain.blablabla.MY_SUPER_INTENT_TO_UPDATE_ALL" /> 
    </intent-filter> 

然後把剛纔從您的應用程序作爲廣播發送此意圖。 在這種情況下,意圖將由您的所有窗口小部件提供程序處理。

+0

這工作,謝謝。我從意圖中移除了目標類,現在所有的窗口小部件提供者都響應相同的意圖。有沒有一種方法可以爲所有小部件尺寸安裝一個接收器?意圖的處理對於所有人都是一樣的,所以沒有必要計算它4次。 – user1076637 2012-01-05 04:45:28