Intereting Posts
Как изменить размер текста элемента NavigationView? Зачем использовать службу android? Полный список кодов ошибок MediaPlayer Вращение ролика камеры Android Метод setDefaultPushCallback из типа PushService устарел с помощью android Проблема добавления динамического представления в Linringayout Как поместить горизонтальную линию делителя между редактированием текста в действии Java.lang.SecurityException: попытка чтения gservices без разрешения Я обновил Android от targetSdk 22 до 23, и я получаю NoSuchMethodError. Как я могу это исправить? Android Wifi прямого множественного соединения ad-hoc Проблема с всплывающим меню в Android ListView Не удалось выполнить сборку с использованием распределения Gradle 'http://services.gradle.org/distributions/gradle-1.6-bin.zip' Как отменить разрешение, которое мое приложение получает от пользовательского gmail AccountManager.getAuthToken ( Просмотр ресайклера вертикального списка прокрутки с горизонтальной прокручиваемой строкой Android не изменяет размер моего макета, если в иерархии есть NestedScrollView

Android – startActivityForResult сразу же запускает onActivityResult

Я запускаю действия из основного startActivityForResult(intent, ACTIVITY_TYPE) деятельности в своем приложении, используя call startActivityForResult(intent, ACTIVITY_TYPE) , и все они работают, но один.

Этот при вызове запускает действие по желанию, но в журнале я вижу, что onActivityResult() сразу запускается. Активность появляется, но RESULT_CANCELED немедленно возвращается в onActivityResult() .

Затем я взаимодействую с активностью, onActivityResult() кнопку, которая вызывает finish() , а onActivityResult() не вызывается на этот раз (потому что, видимо, результат уже возвращен).

Это имеет смысл для всех? Кто-нибудь видел это поведение раньше?

Solutions Collecting From Web of "Android – startActivityForResult сразу же запускает onActivityResult"

Вы не можете использовать startActivityForResult() если ваша активность запускается как singleInstance или singleTask . standard или singleTop режим запуска устранит проблему.

Кроме того, убедитесь, что у намерения не установлен Intent.FLAG_ACTIVITY_NEW_TASK .

Я видел это поведение раньше, пожалуйста, убедитесь, что ваша активность деструкции (эта специальная деятельность) не является singleInstance в файле AndroidManifest. Если Activity is singleInstance , то он будет возвращать RESULT_CANCELED перед RESULT_CANCELED !

Я также хотел бы добавить, что вы можете вызвать внешнее приложение с помощью:
Intent in = caller.getPackageManager().getLaunchIntentForPackage("com.your.package.here");
Что создало бы намерение с Intent.FLAG_ACTIVITY_NEW_TASK добавленным по умолчанию, поэтому вызовите:
in.setFlags(0);
Который очистит этот флаг, а затем вы можете перейти к: startActivityForResult(in, action);

Причина, по которой я делаю это, заключается в том, что у меня есть приложение для утилит, которое имеет общую функциональность между несколькими другими приложениями, и я могу сохранить изменения кода в одном месте, а не беспокоиться о нескольких обновлениях.

Моя проблема была связана с вызывающей деятельностью. Его объявление в AndroidManifest имело следующее свойство:

 android:noHistory="true" 

Изменено это на «ложное» и теперь отлично работает.

Для ActivityGroup или TabHost и других, возможно, xxxActivity является subActivity своего родителя. Тогда startActivityForResult не может работать, но родитель может получить результат.

  1. Call getParent().startActivityForResult() из вашего под-действия

  2. Ваш родитель ( ActivityGroup ) сможет обрабатывать onActivityResult . Поэтому я создал подкласс ActivityGroup и обработал этот onActivityResult .

  3. Вы можете перенаправить этот результат обратно в под-активность, если вам нужно. Просто получите текущую активность getLocalActivityManager().getCurrentActivity() . Мои под-действия наследуются от пользовательской активности, поэтому я добавил handleActivityResult(requestCode, resultCode, data) в этот подкласс для вызываемой ActivityGroup .

Пример: http://www.cnblogs.com/relinson/archive/2012/03/25/startActivityForResult.html

onActivityResult() также будет передавать RESULT_CANCELED как resultCode если вы resultCode пакет или имя класса в файле манифеста.

В Android Manifest установлен android:launchMode="singleTop" для активности, которую вы хотите открыть с результатом, и при открытии флажка установки intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);