当我将一个或多个我的小部件实例添加到主屏幕时,我将遇到麻烦,将它们全部删除,然后添加另一个。
以下是我用来为每个按钮设置“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状态更改事件)
任何可能导致这种情况的想法? 谢谢!
答案 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);
}
希望这有帮助!