2

중복 가능 Deep linking and multiple app instances. 내 응용 프로그램에서 딥 링크를 구현했습니다. 내가 onNewIntent을 처리하기 위해 발사 모드 singleTask을 설정 한Android 딥 링크 및 singleInstance/singleTask

<application 
    android:name=".MyApplication" 
    android:allowBackup="true" 
    android:fullBackupContent="true" 
    android:icon="@drawable/app_logo" 
    android:label="@string/app_name" 
    android:largeHeap="true" 
    android:theme="@style/AppTheme"> 

    <activity 
     android:name=".ActivitySplash" 
     android:configChanges="orientation|screenSize" 
     android:label="@string/app_name"> 
     <intent-filter> 
      <!-- Launcher activity --> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity 
     android:name=".ActivityMain" 
     android:alwaysRetainTaskState="true" 
     android:configChanges="orientation|screenSize" 
     android:exported="true" 
     android:label="@string/app_name" 
     android:launchMode="singleTask" 
     android:windowSoftInputMode="adjustResize"> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.BROWSABLE" /> 
      <data 
       android:host="www.mywebsite.com" 
       android:pathPrefix="/something" 
       android:scheme="http" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".ActivitySignIn" 
     android:configChanges="screenSize|orientation" /> 
    <activity android:name=".ActivitySignUp" /> 
</application> 

() : 나는 매니페스트에 정의 된 인 텐트를 처리 실행기와 MainActivity가 스플래쉬 활동이있다. 이제 내가 원하는 것은 사용자가 DeepLinking에서 활동을 열고 MainActivity에서 이미 진행중인 작업이있는 경우 대화 상자에서 현재 작업을 취소하고 새로운 작업 (딥 링크에서 시작)을 시작할지 묻는 것입니다. 문제는 MainActivity에서 다른 활동을 열면 사용자가 DeepLinking Intent에서 온 것입니다. 그런 다음 두 번째 활동을 중단하고 MainActivity를 직접 엽니 다. 내가 원하는 것은 app/activity가 실행 중이 아니라면 DeepLink의 Intent가 그대로 열려 있다는 것입니다. 그리고 activity/app가 이미 실행 중이면 사용자에게 현재 작업을 닫고 DeepLink 작업/의도를 수행하라는 메시지를 표시합니다.

+0

android : launchMode = "singleTask"대신이 android : launchMode = "singleInstance"를 사용하십시오. 희망이 작동합니다. –

+0

이전에 singleInstance를 사용하고 있었는데 그 경우 앱을 다시 시작하고 앱 아이콘을 두드려 다시 열면 마지막 상태를 표시하는 대신 Splash가 먼저 표시됩니다. 또한 모든 활성로드에서 이상한 애니메이션을 얻으려면 singleInstance를 사용하여 –

+0

전체 매니페스트를 게시하십시오. –

답변

0

이것은 실제로 생각하는대로 작동하지 않습니다. launchMode="singleTask"을 사용하려고하지만 'taskAffinity'도 설정하지 않았으므로 Android는 사용자의 launchMode을 거의 무시합니다.

"singleTask"또는 "singleInstance"특수 실행 모드 중 하나를 사용하여 원하는 것을 가져올 필요는 없습니다.

singleTop 실행 모드를 사용해보고 이것이 문제를 해결하는지 확인하십시오. ActivityMain이 이미 열려 있고 딥 링크를 사용하여 ActivityMain을 다시 실행하면 onNewIntent()ActivityMain으로 호출되어야합니다.

또한 다른 Activity 스택에 여부를 결정하기 위해 static 변수를 사용하여 기반으로 보여주기 위해 무엇을 Activity를 결정하는 방법을 설명합니다 my answer to this question 볼 수 있습니다.

+0

singleTop의 경우 ActivityMain의 자식 활동 인 SignIn 활동이 열려 있으면 어떻게됩니까? 그리고 DeepLink에서 MainActivity를 연 다음 새 작업에서 새 인스턴스를 생성하여 활동 메인을 열고 다시 클릭하면 SignIn 활동이 표시되고 한 번 더 뒤로 누르면 ActivityMain이 다시 표시됩니다 –

+0

예. 사실입니다. 이 경우 어떻게 하시겠습니까? –

+0

흐름이 ActivityMain> SignIn 활동 인 경우 내비게이션 흐름을 유지하고 사용자가 DeepLink에서 ActivityMain을 다시 시작하려고합니다. 그런 다음 SignIn 활동을 떠나야하는지 사용자에게 묻습니다. 그렇다면 역행 작업과 함께 ActivityMain을 표시하십시오. 상태를 표시하고, 이전에 계속 표시하면 로그인 활동이 계속 표시됩니다. 사용자가 SignIn에서 Main 활동으로 돌아 가면 이전 ActivtyMain 상태가 표시되어야합니다 –