Android-startActivityForResult가 즉시 onActivityResult를 트리거 함


144

call을 사용하여 앱의 기본 활동에서 활동을 시작 startActivityForResult(intent, ACTIVITY_TYPE)하고 있으며 모두 하나만 작동합니다.

이것은 호출되면 원하는대로 활동을 시작하지만 로그에서 onActivityResult()즉시 트리거되고 있음을 알 수 있습니다 . 활동이 표시되지만 RESULT_CANCELED즉시 (으)로 돌아갑니다 onActivityResult().

나는 그 상호 작용 활동으로, 버튼 통화를 누르십시오 finish(), 그리고 onActivityResult()(분명히 결과가 이미 반환 되었기 때문에)이 시간에 호출되지 않습니다.

누구에게나 이치에 맞습니까? 이 행동을 전에 본 사람이 있습니까?

답변:


315

startActivityForResult()활동이 singleInstance또는 으로 시작된 경우 사용할 수 없습니다 singleTask. standard또는 singleTop시작 모드가 문제를 해결합니다.


2
둘 다 고마워, 나는 내 매니페스트 파일에 이것을 가지고 완전히 잊어 버렸습니다
TomBomb

9
와! 이것은 javadocs에 추가해야 할 명백한 것 같습니다! 나는 이것을 작동 시키려고 저녁 내내 낭비했고,이 SO 답변은 내 활동이 singleTop으로 설정되었음을 상기시켜주었습니다.
swooby

20
singleTop나를 위해 괜찮아 보인다, singleTask그러나이 문제를 일으켰 기 때문에 singleInstance확실히 그렇게 할 것입니다
darnmason

4
나는 이것을 디버깅하는 데 너무 오랜 시간을 보냈다! 감사!!
suomi35

4
제 경우에는 클래스를 singleInstance 또는 singleTop으로 정의하지 않았지만 여전히 발생하고 있습니다 ... 어떤 제안?
CoDe

110

또한 의도가 Intent.FLAG_ACTIVITY_NEW_TASK설정되어 있지 않은지 확인하십시오 .

로부터 문서 :

호출자가 활동 시작 결과를 요청하는 경우이 플래그를 사용할 수 없습니다.


3
이것은 내 경우 문제를 해결했습니다. 이 문제는 singleInstance, singleTop 또는 singleTask로 인한 것이 아닙니다.
Diana

당신은 박하입니다 (구명 자). 이것은 사용자가 조각으로 이미지를 캡처하기를 원했을 때의 정확한 문제였습니다.
kyay

@Diana, 대신 사용한 것을 기억 Intent.FLAG_ACTIVITY_NEW_TASK하십니까?
Keselme

@Keselme 죄송합니다. 오랜 시간이 지났습니다. 도와 드릴 수 있기를 원하지만 기억이 나지 않아 더 이상 해당 코드에 액세스 할 수 없습니다.
Diana

예, 수정했습니다. startActivityForResult를 Intent.FLAG_ACTIVITY_NEW_TASK와 함께 사용하면 안됩니다.
hanilozmen

21

전에이 동작을 보았습니다. 대상 활동 (특별 활동)이 singleInstanceAndroidManifest 파일에 없는지 확인하십시오 . Activity가 singleInstance인 경우 RESULT_CANCELED시작하기 전에 반환됩니다 !


18

또한 외부 앱을 호출하여 다음과 같이 추가 할 수 있다고 덧붙이고 싶습니다. 기본적
Intent in = caller.getPackageManager().getLaunchIntentForPackage("com.your.package.here");
으로 Intent.FLAG_ACTIVITY_NEW_TASK추가 된 의도를 생성 하므로 호출 :
in.setFlags(0);
해당 플래그를 지우고 다음을 진행할 수 있습니다.startActivityForResult(in, action);

내가하고있는 이유는 몇 가지 다른 응용 프로그램 사이에 공통 기능을 가진 유틸리티 응용 프로그램이 있고 여러 업데이트에 대해 걱정하는 대신 코드 변경 사항을 한 위치로 유지할 수 있기 때문입니다.


나는 이것이 오래되었다는 것을 알고 있지만, 이것은 나에게 절대적으로 귀중한 것이어서 사용자에게 감사하고 싶다고 말하고, 활동 사이를 뛰어 넘는 사람에게 이것이 놀라운 금이라는 것을 지적하십시오! 해커 톤 동안 내 엉덩이를 구했다;)
Wes Winn

더 많은주의가 필요합니다. 최고의 솔루션이며 완벽하게 작동합니다. 시간을 많이 절약 해주셔서 감사합니다
Aritra Roy

이것이 오늘 아침에 겪었던 정확한 문제 였으므로이 답변을 찬성 투표하십시오! 솔루션 주셔서 감사합니다!
Will Johnson

감사. intent.setFlags (0)가 문제를 해결했습니다. 이제 두 번째 앱이 정상적으로 시작되고 결과를 호출 앱으로 반환
Niaz

5

startActivityForResult()롤리팝 이전 버전의 Android 에서는 singleInstance또는 singleTask활동에서 작동하지 않습니다 . Android 5부터 작동합니다 ( 자세한 내용 은 이 답변 참조).


5

또한 FLAG_ACTIVITY_NEW_TASK의도 가 있는 경우에도 트리거됩니다 .

Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult(intent, REQUEST_CODE);

감사. 활동에 FLAG_ACTIVITY_NEW_TASK를 추가했습니다.
Chirag Savsani

1

내 문제는 전화 활동에 관한 것이었다. AndroidManifest에서 선언 한 속성은 다음과 같습니다.

android:noHistory="true"

"false"로 변경했으며 이제는 정상적으로 작동합니다.


1

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


1

또한 Manifest의 활동에서 android : noHistory = "true"인지 확인하십시오. 그렇다면 작동하지 않습니다.


0

위해 ActivityGroup또는 TabHost다른 사람, 어쩌면는 xxxActivityA는 subActivity부모의. 그런 다음 startActivityForResult작동하지 않지만 부모는 결과를 얻을 수 있습니다.

  1. getParent().startActivityForResult()하위 활동에서 전화

  2. 부모님이 님 ActivityGroup을 처리 할 수 ​​있습니다 onActivityResult. 그래서 나는의 서브 클래스를 ActivityGroup만들고 이것을 처리했다 onActivityResult.

  3. 필요한 경우 결과를 하위 활동으로 다시 라우팅 할 수 있습니다. 로 현재 활동을 얻으십시오 getLocalActivityManager().getCurrentActivity(). 내 하위 활동은 사용자 지정 활동에서 상속되므로 handleActivityResult(requestCode, resultCode, data)해당 하위 클래스에 ActivityGroupto to call 을 추가했습니다 .

예 : http://www.cnblogs.com/relinson/archive/2012/03/25/startActivityForResult.html


기본 웹 브라 우어를 호출 할 때이 특별한 경우에 대해 어떻게 생각하십니까 : codeproject.com/Questions/990063/...
아마드 에브라

0

onActivityResult()또한 매니페스트 파일에서 패키지 또는 클래스 이름의 철자를 잘못 입력해도 전달 RESULT_CANCELED됩니다 resultCode.


0

android:launchMode="singleTop"활동에 대한 Android Manifest 세트 에서 결과와 함께 열고 활동 세트 플래그를 여는 동안intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);


0

android:noHistory="true"AndroidManifest.xml의 활동에 정의한 경우 여기에서도 동일한 문제가 발생합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.