我正在编写一个使用PreferenceActivity配置的小部件。小部件需要配置一次 - 它依赖于使用oauth身份验证的api。流程如下:
问题在于第5步 - 关闭发生但小部件未添加到主屏幕!问题是,如果我执行此过程然后将另一个小部件添加到主屏幕,则代码会看到我们已经过身份验证,并且它调用相同的函数来刷新/关闭PreferenceActivity。这次它可以工作并添加到主屏幕!!
我无法解决问题所在。我确实使用普通的Activity而不是PreferenceActivity,但我不明白为什么这会是一个问题。当PreferenceActivity结束以在步骤2中启动浏览器时,我想我应该调用setResult(RESULT_OK ...),但它不起作用。我认为因为它可以从onCreate而不是来自回调(当asynctask完成时),这是因为它没有在UI线程上运行,但是通过调用runOnUiThread强制它也不起作用......
第5步的代码是:
private static void refreshWidgetAndShowHomeScreen(final Activity activity, int appWidgetId) {
// ... code that does refresh
Intent showHome = new Intent(Intent.ACTION_MAIN);
showHome.addCategory(Intent.CATEGORY_HOME);
showHome.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
activity.setResult(RESULT_OK, showHome);
activity.finish();
activity.startActivity(showHome);
}
该函数是静态的,因为我正在为android API 7+编写小部件,因此它从Activity本身和Fragment中调用大于Honeycomb的版本。
答案 0 :(得分:1)
经过大量尝试说服这个工作后,我在第一次运行小部件时最终在onCreate中执行了以下操作,因此它会立即添加到屏幕上。代码关闭活动,然后立即重新启动它。
视觉上看起来没问题。但这很糟糕,因为如果用户无法进行身份验证或不想再进行身份验证,则屏幕上会有一个死小部件。建议欢迎......
解决方法:
final Intent intent2 = getIntent();
intent2.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
setResult(RESULT_OK, intent2);
finish();
startActivity(intent2);