设备启动后,Android小部件更新调用两次

时间:2012-11-13 15:43:32

标签: android widget boot reboot

设备重启后,我首先收到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 :(得分:2)

  

您是否找到了避免两次调用更新的方法?

您无法控制更新的次数。这取决于主屏幕和应用程序小部件框架。

答案 1 :(得分: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
            }
        }
    }

}