2012-08-12 4 views
5

높은 곳과 낮은 곳을 검색 한 결과 내 문제가 발생하지 않았습니다. 그래서 나는 마침내 약간의 도움을 청합니다.외부 활동에 대한 startActivityForResult를 얻는 방법?

두 가지 앱이 있습니다. 둘 다 저에게 씁니다. App A는 Intent.putExtra()를 통해 매개 변수를 전달하여 App B를 시작합니다. App B가 시작될 때 매개 변수가 제대로 전달되면 완벽하게 작동합니다.

그러나 응용 프로그램 A에 대한 응답을 반환하는 방법을 찾을 수 없습니다. startActivityForResult()를 사용하면 항상 즉시 onActivityResult()에 RESULT_CANCELED가 제공됩니다. 추가 검사에서 logcat은 "활동이 새로운 작업으로 시작되므로 활동 결과를 취소합니다"라는 경고를 내게 전했습니다.

다른 시작 모드, 동작 필터 (android.intent.action.PICK)로 App B의 활동을 만들려고했지만 아무 것도 변경하지 않았습니다.

불가능을하려고합니까? 내가 이해하는 바에 따르면, 내가하려고하는 것은 타사 활동을 사용하여 장치의 사진 갤러리에서 사진을 선택하는 것과 유사해야합니다.

편집 :

좋아, 내가 활동 B에서 실행 프로그램 범주를 제거하려하지만 여전히 작동하지 않습니다. 여기 내 활동입니다 :

<activity android:name=".${CLASSNAME}" android:label="@string/app_name" android:configChanges="mcc|mnc|locale|keyboardHidden|orientation" android:launchMode="standard"> 
    <intent-filter> 
     <action android:name="android.intent.action.PICK" /> 
    </intent-filter> 
</activity> 

아무도 실제로이 작업을 구하셨 대? 나는 다른 프로그램의 활동을 시작하는 것이 의심 스럽기 시작했습니다. 왜냐하면 "인 텐트 필터"에 무엇을 넣든 항상 새로운 작업을 시작하기 때문에 결과를 반환 할 수없는 것입니다. 당신의 활동 B에서

+0

사용중인 코드를 게시하고 ActivityB에 대한 의도를 실행하십시오. 두 번째 Activity에서'this.setResult (Activity.RESULT_OK, data);'와 같은 것을 넣을 수 있어야한다. – FoamyGuy

+0

매니페스트 파일을 게시 할 수 있습니까? 어쩌면 B 액티비티에 특별한 것이 있습니다 태그 – nandeesh

+0

Hmmm ... 액티비티 B에 가 있습니다. 나는 지금 내 작업 기계에 있지 않다. 나는 그것을 제거하고 그것이 효과가 있는지보기 위해 노력할 것입니다. 내가 읽은 바로는 동일한 패키지의 일부가 아닌 활동을 시작하면 항상 새로운 작업이 시작됩니다. 그렇다면 startActivityForResult가 다른 apk에서 외부 활동을 시작하는 데 작동하지 않습니까? –

답변

0

, 당신은

Intent intent = new Intent(); 
setResult(Activity.RESULT_OK, intent); 
finish(); 

또는이 될 수 있습니다, 이런 식으로 뭔가를해야 당신이 활동 A. 모든 데이터를 전달 할 필요가 없습니다

setResult(Activity.RESULT_OK); 
finish(); 

그렇지 않으면 항상 결과 코드 Activity.RESULT_CANCELED으로 끝납니다. 자식 활동이 어떤 이유로 (예 : 충돌과 같은) 실패 할 경우

는 부모 활동은 RESULT_CANCELED 코드와 결과를 받게됩니다.

희망이 도움이됩니다.

+1

나는 이것을 구현했다. 문제는 활동 A가 활동 B가 종료되기 전에도 onActivityResult()를 호출했기 때문입니다. Logcat은 "활동이 새로운 작업으로 시작되므로 활동 결과를 취소합니다"라고 말합니다. 그래서 B 액티비티가 새로운 작업으로 시작된 것 같았습니다. 다른 APK 앱이기 때문에 놀랄 일이 아닙니다. 이미지 선택기와 같은 유틸리티 활동은 어떻게 쓰여 집니까? –

+0

@ Lf3T-Hn4D 당신이'런처 (launcher) '카테고리를 가지고 있다고 언급 했으므로 새로운 작업으로 활동을 시작할 것입니다. 그래서 그것을 시작한 활동으로부터 완전히 독립적으로 시작될 것입니다. 해당 카테고리 스타일을 제거하고 시도하십시오. http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK –

+0

아 .. 알았어. 내 작업 기계로 돌아 가면 다시 시도해보고 알려 드리겠습니다. :-) Thanks –

9

실행중인 활동에 manifest에서 android : launchMode가 설정되어 있지 않은지 확인하고 android : taskAffinity가 사용되고 있지 않은지 확인하십시오. 여기를 참조하십시오 :

http://developer.android.com/guide/topics/manifest/activity-element.html#aff

이 텐트는 FLAG_ACTIVITY_NEW_TASK이 설정이없는 활동을 시작하기 위해 사용하고 있는지 확인하십시오. 여기를 참조하십시오 :

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK

을 특정 주에서 "활동이 시작되는 호출자가 결과를 요청하는 경우이 플래그는 사용할 수 없습니다."

새 작업의 일부로 활동이 시작된 경우 Android는 같은 작업의 활동 만 다른 작업에 결과를 반환 할 수 없으므로 Android에서 즉시 onActivityResult()를 RESULT_CANCELED로 호출합니다. NEW_TASK 플래그가 추가됩니다 왜 소스 코드를 살펴 보았다 같은 문제를 가졌어요. 그래서

+0

큰 도움, 고맙습니다. – Ninja

1

를 수행합니다. 소스 활동가 또는 대상 활동 B 중 하나가 단일 인스턴스 출시를 사용하는 경우

밝혀 모드에서 NEW_TASK 플래그가 자동으로 추가됩니다.

if (sourceRecord.launchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE) { 
     // The original activity who is starting us is running as a single 
     // instance... this new activity it is starting must go on its 
     // own task. 
     launchFlags |= Intent.FLAG_ACTIVITY_NEW_TASK; 
    } else if (r.launchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE 
      || r.launchMode == ActivityInfo.LAUNCH_SINGLE_TASK) { 
     // The activity being started is a single instance... it always 
     // gets launched into its own task. 
     launchFlags |= Intent.FLAG_ACTIVITY_NEW_TASK; 
    } 

두 앱을 모두 소유하고 있으므로 실행 모드가 매니페스트 또는 인 텐트에 정의되어 있지 않은지 확인할 수 있어야합니다.

지금까지는 내키지 않는 NEW_TASK 플래그의 다른 인스턴스를 찾을 수 없었습니다.

관련 문제