Я запускаю действия из основного действия в своем приложении с помощью вызова startActivityForResult(intent, ACTIVITY_TYPE)
, и все они работают, кроме одного.
Этот, при вызове, запускает действие по желанию, но в журнале я вижу, что onActivityResult()
он сразу запускается. Активность появляется, но RESULT_CANCELED
сразу возвращается onActivityResult()
.
Затем я взаимодействую с действием, нажимаю кнопку, которая вызывает finish()
, и onActivityResult()
на этот раз не вызывается (поскольку, очевидно, результат уже был возвращен).
Имеет ли это смысл для кого-либо? Кто-нибудь видел такое поведение раньше?
источник
singleTop
кажется хорошим для меня,singleTask
однако вызывало эту проблему и, следовательноsingleInstance
, определенно сделало бы этоКроме того, убедитесь, что у намерения нет
Intent.FLAG_ACTIVITY_NEW_TASK
набора.Из документов :
источник
Intent.FLAG_ACTIVITY_NEW_TASK
?Я видел такое поведение раньше, пожалуйста, убедитесь, что ваша активность (эта специальная деятельность) не находится
singleInstance
в файле AndroidManifest. Если Активность естьsingleInstance
, то она вернетсяRESULT_CANCELED
до запуска!источник
Я также хотел бы добавить, что вы можете вызывать внешнее приложение с помощью:
Intent in = caller.getPackageManager().getLaunchIntentForPackage("com.your.package.here");
который будет создавать намерение с
Intent.FLAG_ACTIVITY_NEW_TASK
добавленным по умолчанию, поэтому вызовите:in.setFlags(0);
который очистит этот флаг, а затем вы можете перейти к:
startActivityForResult(in, action);
Причина, по которой я это делаю, заключается в том, что у меня есть служебное приложение, которое имеет общие функции между несколькими другими приложениями, и я могу хранить изменения кода в одном месте, вместо того, чтобы беспокоиться о нескольких обновлениях.
источник
startActivityForResult()
не работает сsingleInstance
илиsingleTask
активностью в версии до леденца на палочке Android. Начиная с Android 5 это работает (см. Этот ответ для более подробной информации).источник
Это также срабатывает, если у вас есть
FLAG_ACTIVITY_NEW_TASK
намерение.источник
Моя проблема была с вызовом деятельности. Его объявление в AndroidManifest имеет следующее свойство:
Изменил его на «ложь» и теперь работает нормально.
источник
В Android 4.4 есть небольшая проблема с ожиданием возврата в конце закрытия действия. Чтобы решить эту проблему, важно установить:
TaskAffinity = "[SAME STRING]"
)launchmode=singleTop,
launchIntent.SetFlags(0); // for reset default Intent flags if you launch from package manager
Это решение работает со всеми версиями Android
См. Это для taskAffinity: https://asyoulook.com/computers%20&%20internet/android-onactivityresult-being-called-instantly/1004072
источник
Кроме того, проверьте, если android: noHistory = "true" на активность в манифесте, если да, он не будет работать.
источник
Для
ActivityGroup
илиTabHost
и других, возможно,xxxActivity
являетсяsubActivity
его родителем. ТогдаstartActivityForResult
не может работать, но родитель может получить результат.звонок
getParent().startActivityForResult()
из вашей под-деятельностиВаш родитель (
ActivityGroup
) сможет справиться сonActivityResult
. Поэтому я создал подклассActivityGroup
и обработал этоonActivityResult
.При необходимости вы можете перенаправить полученный результат обратно в подзадачу. Просто получите текущую активность по
getLocalActivityManager().getCurrentActivity()
. Мои подзадачи наследуются от пользовательских действий, поэтому я добавилhandleActivityResult(requestCode, resultCode, data)
в этот подкласс дляActivityGroup
вызова.пример: http://www.cnblogs.com/relinson/archive/2012/03/25/startActivityForResult.html
источник
onActivityResult()
также передаетсяRESULT_CANCELED
как,resultCode
если вы неправильно написали имя пакета или класса в файле манифеста.источник
В манифесте Android
android:launchMode="singleTop"
для активности, которую вы хотите открыть с результатом, а при открытии установите флаг активностиintent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
источник
Если вы определили
android:noHistory="true"
действие в вашем AndroidManifest.xml, это вызовет ту же проблему.источник