Я пишу виджет, который настроен с использованием PreferenceActivity. Виджет необходимо настроить один раз - он опирается на api, который использует аутентификацию oauth. Поток выглядит следующим образом:Виджет с использованием PreferenceActivity, не добавляющий на главный экран
- Перетащите виджет на главный экран появляется
- PreferenceActivity, делает запрос для запроса маркеров и перенаправляет браузер
- Пользователя аутентифицирует с сайтом, а затем у меня есть обратный вызов к PreferenceActivty
- Widget запрашивает маркер доступа и сохраняет его
- Виджет освежает и закрывает PreferenceActivty
Проблема заключается в шаге 5 - закрытие происходит, но виджет не добавляется на главный экран! Дело в том, что если я сделаю этот процесс, а затем добавлю еще один виджет на главный экран, код увидит, что мы уже прошли аутентификацию, и он вызывает ту же функцию, что и для обновления/закрытия PreferenceActivity. На этот раз он работает и добавляется на главный экран!
Я не могу решить, где проблема здесь. У меня это работало с использованием обычной Activity, а не PreferenceActivity, но я не понимаю, почему это было проблемой. Думал, что я должен вызвать setResult (RESULT_OK ...), когда PreferenceActivity закончит запуск браузера на шаге 2, но он не работает. Я думал, потому что он работает от onCreate, но не от обратного вызова (когда асинктас завершен), потому что он не работал в потоке пользовательского интерфейса, но заставлял его звонить по вызову 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);
}
функция является статической, потому что я пишу виджет для андроид API 7+, так это называется как от самой деятельности и от фрагмента для версий более Honeycomb.
Не могли бы вы добавить это к OnDestroy() в PreferenceActivity вместо этого? – Merkidemis