Удаление AppWidgets программно - PullRequest
15 голосов
/ 26 декабря 2010

Мне сложнее всего разобраться, как программно удалить домашний экран AppWidget (то есть без того, чтобы пользователь фактически перетаскивал его в корзину). В качестве примера рассмотрим приложение, которое может иметь несколько учетных записей с любым количеством виджетов для каждой учетной записи - после удаления учетной записи также необходимо удалить виджет.

Я пытался следовать неясному примеру из http://www.netmite.com/android/mydroid/cupcake/frameworks/base/services/java/com/android/server/AppWidgetService.java,, но, похоже, это даже не вызывает 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);

Есть ли у кого-нибудь совет, как это можно сделать? Примером могут служить колени пчелы. Спасибо.

Ответы [ 2 ]

27 голосов
/ 26 декабря 2010

Вы не можете добавлять или удалять виджеты приложений с главного экрана. Только пользователь может сделать это.

Любые виджеты приложения, связанные с удаленной учетной записью, могут отображать другую учетную запись или использовать какой-либо вид «(учетная запись удалена)», который заставит пользователя избавиться от виджета приложения или перенастроить его.

0 голосов
/ 15 октября 2011

Я уверен, что это должно работать:

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