2014-02-07 1 views
2

우리가 아래 텐트 필터와 안드로이드 응용 프로그램을 작성 :Android에서 Gmail을 별도의 작업으로 의도를 실행할 수 있습니까?

gmail handles our app intent-filter

: 우리의 응용 프로그램에 대한 링크를받을 Gmail을

 <intent-filter> 
      <action android:name="android.intent.action.SEND" /> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data 
       android:host="www.appname.com" 
       android:scheme="http" /> 
      <data 
       android:host="www.appname.com" 
       android:scheme="https" /> 
     </intent-filter> 

안드로이드 사용자가 아래 이미지와 같이 우리의 응용 프로그램을 선택할 수 있습니다

그러나 최근 앱을 살펴보면 Google 앱이 Gmail 프로세스 내부에서 실행되고있는 것처럼 보입니다. 이는 우리가 원하지 않는 것입니다. 특히 앱이 이미 실행중인 경우 gmail이 실행중인 프로세스에 앱 의도를 전달하여 앱에로드하려고합니다. Gmail은 프로세스가 그 내부에서 실행되는 응용 프로그램의 내장 (별도의 인스턴스)가 어떻게 응용 프로그램은 자체 프로세스에서 실행되는 동안, 참조 :

gmail app is running a second instance of our app to complete the intent

텐트 필터에 대한 조언이 크게 감사하겠습니다 해결하기 위해 . 안드로이드 문서는 이런 상황에 전혀 도움이되지 않습니다.

+2

스크린 샷은 프로세스와 관련이 없습니다. 그것은 작업과 관련이 있습니다. https://developer.android.com/guide/components/tasks-and-back-stack.html – CommonsWare

+0

제가 아주 새롭기 때문에 이름 짓기를 도와 주신 @CommonsWare에게 감사드립니다. 기계적 인조 인간. 애플리케이션의 이미 실행중인 작업과 같은 다른 작업에서 Gmail 의도를 완료 할 수 있습니까? 주 활동의 여러 복사본을 실행하는 것은 비용이 많이 들고 잠재적으로 불안정합니다. – spirographer

+1

매니페스트의 ''에'android : launchMode = "singleTask"를 사용해보십시오. – CommonsWare

답변

3

기본적으로 활동은 활동을 시작한 활동에 속합니다. 많은 경우에, 그것은 옳은 대답입니다.

그러나 이미 다른 작업에서 이미 실행중인 복사본으로 이동하려면 컨트롤을 을 매니페스트의 <activity> 요소에 추가하십시오. 인용 the documentation :

시스템은 새 작업을 만들고 새 작업의 루트에서 활동을 인스턴스화합니다. 그러나 활동 인스턴스가 이미 별도의 타스크에있는 경우, 시스템은 새 인스턴스를 작성하지 않고 해당 onNewIntent() 메소드를 호출하여 인 텐트를 기존 인스턴스로 라우트합니다. 한 번에 하나의 활동 인스턴스 만 존재할 수 있습니다.

+0

매우 유용합니다! 나는 "singleTask"보다는 "singleTop"모드로 설정했다. 전에 인스턴스가 이미 실행중인 동안 파일을 열려고하면 내 앱이 멈춘 것처럼 보였습니다. 나는 이전에 동일한 외부 앱을 여러 번 연속 사용하여 광산을 론칭하는 방식으로 위양성 테스트를 거쳤 음에 틀림 없다고 생각합니다. 설명서에 따르면이 모드는 일반적으로 사용자가 기대하는 것과 다르므로 권장하지 않습니다. 나는 그것을 따르지 않는다. 앱이 외부 앱이 아닌 다른 앱에서 열리 길 기대하는 사용자는 누구입니까? 참고 : http://developer.android.com/guide/topics/manifest/activity-element.html – BuvinJ