2012-06-21 56 views
0

我想測試我的應用程序窗口小部件,並已註冊清單中的接收器如下:Android的廣播接收器沒有啓動起來更新AppWidget

<receiver android:name=".MyUtilityWidget" android:label="@string/widget_name"> 
      <intent-filter> 
       <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
      </intent-filter> 
     <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_config" /> 
    </receiver> 

的MyUtility代碼:

 public class MyUtilityWidget extends AppWidgetProvider { 

     @Override 
     public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 

      my Main Code here.... (widget stuff) 
    } 

我小部件啓動並執行一次罰款(因此我離開這裏的代碼)。然而,廣播接收機不工作,我沒有收到廣播。實際上,LogCat顯示意圖永遠不會被執行。所以,我的代碼塊只在apk部署時執行一次,不會再次執行(小部件文本顯示,但從未更新,因爲我已經設置了每30米)。

配置在這裏...

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
android:minWidth="146dip" 
android:minHeight="72dip" 
android:updatePeriodMillis="1800000" 
android:initialLayout="@layout/widget_message" 
/> 

也updatePeriodMillis不能少於30分鐘?調試時這是一個非常煩人的問題,因爲我必須等待大約30分鐘,每次運行檢查意圖是否被解僱!

任何幫助表示讚賞。

+0

嘗試指定到你的部件,而不是「.MyUtilityWidget」 – Jug6ernaut

回答

1

您需要通過RemoteViews抓住您的小部件並相應地進行更新。它不會自動更新。

嘗試是這樣的:

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this 
       .getApplicationContext()); 
     ComponentName thisWidget = new ComponentName(getApplicationContext(), 
       MyWidgetProvider.class); 
     int[] allWidgetIds2 = appWidgetManager.getAppWidgetIds(thisWidget); 
     final int N =allWidgetIds2.length; 
     // Perform this loop procedure for each App Widget that belongs to this provider 
     for (int i=0; i<N; i++) { 
      int appWidgetId = allWidgetIds2[i]; 
      RemoteViews widgetView = new RemoteViews(getPackageName(), R.layout.widget_layout); 
      widgetView.setTextViewText(R.id.some_text_view, "some text"); 
+0

完整路徑你好,對不起,我上面的代碼實際上不工作,所以,也許這只是一個錯誤的地方我的部分,可能有用於測試的設備上的舊版本(舊薑餅升級2.3.7 HTC G2)。感謝RemoteViews,我已經使用它來執行忽略的小部件代碼片段中的更新,並且更新正常工作。所以真的,沒什麼別的要說 - 謝謝你,作爲一個真正沒有答案的問題的單一答案,我最好標記你! –