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.