删除所有实例并添加另一个实例后,App Widget停止响应输入

时间:2011-08-02 19:22:52

标签: android android-widget android-appwidget

当我将一个或多个我的小部件实例添加到主屏幕时,我将遇到麻烦,将它们全部删除,然后添加另一个。

以下是我用来为每个按钮设置“onClick”意图的代码(按钮是资源)

protected void matchButtonToAction(Context context, RemoteViews views, String action, int button) {
    Intent intent = new Intent(context, MightyToggleWidget.class);
    intent.setAction(action);

    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
    views.setOnClickPendingIntent(button, pendingIntent);
}

仅当我删除 ALL 实例并添加一个实例时才会发生这种情况。如果我添加2,删除1并添加1它仍然有效。

它仍然接收并响应电池事件,但不接收其他事件(例如wifi状态更改事件)

任何可能导致这种情况的想法? 谢谢!

1 个答案:

答案 0 :(得分:0)

我发现了这个问题。添加第一个窗口小部件时,onEnabled事件将在开始时触发。删除最后一个窗口小部件时会触发onDisabled事件,但是当您尝试添加另一个“第一个”窗口小部件时,不会触发onEnabled事件。

我的代码类似于那些事件中的示例。这导致packagemanager取消注册我的AppWidgetProvider接收这些事件

@Override
public void onEnabled(Context context) {
    PackageManager pm = context.getPackageManager();
    pm.setComponentEnabledSetting(new ComponentName(context.getPackageName(), getClass().getName()), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
}

@Override
public void onDisabled(Context context) {
    PackageManager pm = context.getPackageManager();
    pm.setComponentEnabledSetting(new ComponentName(context.getPackageName(), getClass().getName()), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
}

我添加了一个静态方法,当Configuration Activity添加一个调用PackageManager的新实例时,会调用该方法。如果有人发现它有用,这是代码

public static void newInstanceAdded(Context context, AppWidgetManager appWidgetManager, RemoteViews views, SharedPreferences prefs, int id){

    ComponentName thisAppWidget = new ComponentName(context, MightyToggleWidget.class);
    int ids[] = appWidgetManager.getAppWidgetIds(thisAppWidget);

    if (ids.length == 1){
        PackageManager pm = context.getPackageManager();
        pm.setComponentEnabledSetting(new ComponentName(context.getPackageName(), MightyToggleWidget.class.getName()), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
    }

    updateWidgetInstance(context, appWidgetManager, views, prefs, id);
}

希望这有帮助!