Android 以编程方式删除AppWidgets

Android 以编程方式删除AppWidgets,android,android-appwidget,Android,Android Appwidget,我最难弄清楚如何以编程方式删除主屏幕AppWidget(即,用户不实际将其拖到垃圾箱中)。举个例子,考虑一个可以有多个帐户的应用程序,每个帐户都有多个小部件——一旦一个帐户被删除,WIDGET也应该被删除。 我试着按照中一个模糊的例子来做,但这似乎并没有触发OnDeleted,更不用说从主屏幕上删除AppWidget了 Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_DELETED); intent.setComponen

我最难弄清楚如何以编程方式删除主屏幕AppWidget(即,用户不实际将其拖到垃圾箱中)。举个例子,考虑一个可以有多个帐户的应用程序,每个帐户都有多个小部件——一旦一个帐户被删除,WIDGET也应该被删除。 我试着按照中一个模糊的例子来做,但这似乎并没有触发OnDeleted,更不用说从主屏幕上删除AppWidget了

Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_DELETED);
intent.setComponent(info.componentName); // references AppWidgetProvider's class
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
sendBroadcast(intent);

有人对如何实现这一点有什么建议吗?蜜蜂的膝盖就是一个例子。谢谢。

您无法从主屏幕添加或删除应用程序小部件。只有用户可以这样做


任何绑定到已删除帐户的应用程序小部件都可能显示不同的帐户,或采用某种“(帐户已删除)”外观,这将触发用户删除应用程序小部件或重新配置它。

我很确定这应该可以工作:

int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName("com.example",
                        "com.example.Widget"));
AppWidgetHost host = new AppWidgetHost(ctx, 0);
host.deleteAppWidgetId(appWidgetIds[0]);

谢谢,马克。顺便说一下,这本书很棒。@Harshid:设置您的
AppWidgetProvider
以响应
onDeleted()
和/或
onDisabled()
。对于与
AppWidgetProvider
@HarshTrivedi相对应的
元素,您需要在
中执行相应的操作。我建议为此单独提出一个问题。主屏幕显然可以摆脱应用程序小部件,但我个人不知道它们是如何做到的。@Commonware我在三星设备中检查过,当我拖放“联系人”小部件时,会弹出一个活动,当我们选择任何联系人时,小部件就会设置,但如果我们不选择任何联系人就退出活动,然后小部件将自动删除。所以,如果我们不能从主屏幕上删除小部件,请告诉我们,他们是如何管理它的。Thanks@ErKimmiDhingra:您指的是。如果用户退出该活动,系统首先不会添加应用程序小部件。应用程序小部件的开发人员没有删除任何内容。不幸的是,这不起作用,因为deleteAppWidgetId()不会从主屏幕删除小部件,而只是删除。