У меня есть некоторые проблемы с моими виджетами. Вот описание:
Контекст:
У меня есть домашний виджет.
Когда я добавляю его, он выдает конфигурационную активность для установки некоторых параметров для виджета.
Если я назову setResult (RESULT_OK, resultValue);, прежде чем завершить операцию настройки, виджет будет добавлен в Home.
Если я удалю виджет, перетащив его в корзину мусора, вызывается public void onDeleted (контекст контекста, int [] appWidgetIds) из моего класса AppWidgetProvider. Пока все хорошо.
Проблема: Если операция конфигурации завершается с помощью результирующего кода RESULT_CANCELED (setResult (RESULT_CANCELED);), public void onDeleted (контекст контекста, int [] appWidgetIds) из моего класса AppWidgetProvider не вызывается и виджет остается в списке активных виджетов. Когда я перезапускаю телефон, вызывается onUpdate (контекст контекста, AppWidgetManager appWidgetManager, int [] appWidgetIds) из моего класса AppWidgetProvider и в int [] appWidgetIds у меня есть все виджеты (ids), которые должны быть отменены (удалены до добавления) + активные (те, которые фактически отображаются в Доме). Виджеты, которые были удалены путем перетаскивания в корзину мусора, не отображаются в этом списке. Со временем этот список идентификаторов виджетов продолжает становиться все больше и больше, если пользователь отменяет конфигурацию Activity.
В справочнике API говорится примерно так: "Если вы вернете RESULT_OK с помощью Activity.setResult(), AppWidget будет добавлен, и вы получите ACTION_APPWIDGET_UPDATE для этого AppWidget. Если вы вернете RESULT_CANCELED, хост отменит добавление и не отобразит этот AppWidget, и вы получите ACTION_APPWIDGET_DELETED."
Может ли кто-нибудь дать мне несколько намеков на это? Спасибо.
Вот мой манифест:
<application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
<receiver android:name=".MytWidget" 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/my_widget_provider" />
</receiver>
<activity android:name=".ConfigurationActivity">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
</intent-filter>
</activity>
</application>
Остальная часть кода не имеет значения, поскольку она была описана выше (и у меня нет разрешения на ее публикацию).