这是我配置应用程序小部件的方式:
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="240dp"
android:minHeight="193dp"
android:updatePeriodMillis="86400000"
android:initialLayout="@layout/xyz_appwidget"
android:configure="com.xyz.activity.Configuration"
/>
因此,系统会弹出Configuration
活动,一旦用户将小部件放在主屏幕上。不幸的是,如果没有应用配置,这个小部件不应该放在屏幕上。
我添加了一些调试输出。当用户为其主屏幕选择小部件时会发生这种情况。Note:这是当配置活动位于前面而不是小部件时。
I/ActivityManager( 101): Start proc com.xyz for broadcast com.xyz/.widget.xyz.XyzWidgetProvider: pid=14371 uid=10050 gids={3003, 1015}
D/XyzWidgetProvider(14371): onReceive: android.appwidget.action.APPWIDGET_ENABLED
D/XyzWidgetProvider(14371): onEnabled
D/XyzWidgetProvider(14371): onReceive: android.appwidget.action.APPWIDGET_UPDATE
因此,这意味着即使未配置小部件,两个事件(启用、更新)都会被触发。Enabled对我来说有道理,但是UPDATE显然不是。尤其是当Configuration
活动成功完成,无需额外UPDATE正在发送事件。
我还通过设置结果来读到Configuration
活动到Activity.RESULT_CANCELED
,可以取消配置过程。但由于这显然是异步运行的,我不知道如何进行配置过程blocking?以前有人遇到过这个吗?
最后一点:我查看了 Android Gallery Widget,它somehow正确管理此操作,因此不会添加未配置的图库小部件。但我怀疑有些HTCmagic因为日志不是很有帮助。
以下是处理此问题的方法:
在您的配置活动中,在 onCreate() 中执行此操作:
setResult(Activity.RESULT_CANCELED);
配置活动完成后,例如所有参数均已设置并且小部件应显示,执行
setResult(Activity.RESULT_OK);
因此,如果用户没有完成配置活动,您的小部件将被删除。
然而,在widget代码本身(onUpdate)中,您仍然需要检查配置是否完成,因为在配置完成之前肯定会调用APPWIDGET_UPDATE。如果配置不存在,您可以完全跳过所有更新,此时您的小部件将不可见,并且一旦配置完成,您的小部件要么被系统删除,要么它的配置在那里。
还有一件事。成功完成后,您需要从配置活动启动小部件更新,因为系统不会自行执行此操作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)