2012-11-13 38 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 
      } 
     } 
    } 

}