android – 当配置活动结果传递RESULT_CANCELED时,Widget不会被删除

我的小部件有一些问题。以下是说明:

语境:

我有一个家庭小部件。

当我添加它时,它弹出一个配置活动来设置小部件的一些参数。

如果我调用setResult(RESULT_OK,resultValue);在完成配置活动之前,该小部件将添加到主页。

如果我通过将其拖动到垃圾桶来删除小部件,则会调用来自我的AppWidgetProvider类的public void onDele(Context context,int [] appWidgetIds))。
到现在为止还挺好。

问题:
如果配置活动退出结果代码RESULT_CANCELED(setResult(RESULT_CANCELED);)),我的AppWidgetProvider类中的public void onDele(Context context,int [] appWidgetIds))不被调用,并且该窗口小部件保留在活动窗口小部件列表中。当我重新启动电话时,我的AppWidgetProvider类中的onUpdate(上下文上下文,AppWidgetManager appWidgetManager,int [] appWidgetIds))被调用,并且在int [] appWidgetIds中我有所有应该被取消的窗口小部件(ids)(被添加之前被删除)活跃的(实际显示在家里的)。通过拖动到垃圾桶被删除的小部件不会显示在此列表中。随着时间的推移,如果用户从配置活动中取消,这个小部件ID列表会越来越大。

API参考文献如下:
“如果您使用Activity.setResult()返回RESULT_OK,则会添加AppWidget,您将收到此AppWidget的ACTION_APPWIDGET_UPDATE广播。如果返回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>

其余的代码并不相关,因为上面已经解释了(我没有权限发布)。

我有同样的问题,我在onPause事件上做到了

public void removeWidget(int appWidgetId) {
    AppWidgetHost host = new AppWidgetHost(Config.this, 1);
    host.deleteAppWidgetId(appWidgetId);
}

检查了窗口小部件,窗口小部件被删除。
如果您只有一个应用程序小部件主机,则主机ID不重要。

private boolean canceled = true;

@Override
protected void onPause() {
    if(canceled) {
        removeWidget(appWidgetId);
    }
    super.onPause();
}

在OK单击,我设置取消的false

http://stackoverflow.com/questions/4393144/widget-not-deleted-when-passing-result-canceled-as-result-for-configuration-acti

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:android – 当配置活动结果传递RESULT_CANCELED时,Widget不会被删除