【发布时间】:2023-04-02 08:40:01
【问题描述】:
我的小部件有一些问题。这是描述:
上下文:
我有一个家庭小部件。
当我添加它时,它会弹出一个配置活动,用于为小部件设置一些参数。
如果我在完成配置Activity之前调用setResult(RESULT_OK, resultValue);,小部件就会被添加到Home中。
如果我通过将小部件拖到垃圾箱来删除它,则会调用我的 AppWidgetProvider 类中的 public void onDeleted(Context context, int[] appWidgetIds)。 到目前为止一切顺利。
问题: 如果配置 Activity 以结果代码 RESULT_CANCELED (setResult(RESULT_CANCELED);) 退出,则不会调用我的 AppWidgetProvider 类中的 public void onDeleted(Context context, int[] appWidgetIds)并且小部件保留在活动小部件列表中。当我重新启动手机时,我的 AppWidgetProvider 类中的 onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) 被调用,并且在 int[] appWidgetIds 我拥有所有应该是的小部件(ID)取消(添加前已删除)+ 活动的(实际显示在主页上的)。通过拖拽到垃圾箱中删除的 Widget 不会显示在此列表中。随着时间的推移,如果用户从配置活动中取消,这个小部件 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>
其余代码不相关,因为上面已经解释过了(我无权发布它)。
【问题讨论】:
-
看来我的问题记录在这里:code.google.com/p/android/issues/detail?id=2539