2012-11-13 65 views
2

設備重啓後後叫了兩聲Android小工具更新我收到的第一APPWIDGET_ENABLED然後兩次 APPWIDGET_UPDATE。 我花了相當多的時間搜索這個沒有結果。 有人遇到過嗎?您是否找到避免兩次更新的方法?設備引導

下面是一些代碼:

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



public void onReceive(final Context context, final Intent intent) { 
    super.onReceive(context, intent); 
    final String action = intent.getAction(); 

    if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) { 
     Log.i(TAG, "update"); 
    } else if (AppWidgetManager.ACTION_APPWIDGET_ENABLED.equals(action)) { 
     Log.i(TAG, "enabled"); 
    } 
} 

回答

2

你找到一種方法來避免調用更新兩次?

你必須對你有多少次更新的控制。這取決於主屏幕和應用構件框架。

+0

您的意思是說我可以更新n次(不只是2次),即使我在桌面上只有1個小部件實例? – sara

+0

@sara:是的。無法保證主屏幕要求更新的次數。 – CommonsWare

+0

很高興聽到我的小部件依賴於一個不確定的平臺!有沒有辦法解決這個問題? – sara

0
import java.util.ArrayList; 

import android.appwidget.AppWidgetManager; 
import android.appwidget.AppWidgetProvider; 
import android.content.Context; 

public class CopyOfWidgetProvider extends AppWidgetProvider { 

    private static ArrayList<Integer> widgets = new ArrayList<Integer>(); 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] widgetIDs) { 
     super.onUpdate(context, appWidgetManager, widgetIDs); 

     for (int widgetID : widgetIDs) { 
      if (!widgets.contains(widgetID)) { 
       widgets.add(widgetID); 
       // this code will run only ONCE after reboot 
       // loop is necessary in cases where there were more than one 
       // instances of widget before reboot 
      } 
     } 
    } 

}