2

Mögliche Duplicate Deep linking and multiple app instances. Ich habe Deep Linking in meiner App implementiert. Ich habe Splash-Aktivität, die Trägerrakete und MainActivity ist, dass die Absicht behandelt wie im Manifest definiert:Android Deep Linking und 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> 

I Startmodus singleTask gesetzt haben zu handhaben onNewIntent(). Nun, was ich erreichen möchte, ist, dass, wenn der Benutzer die Aktivität von DeepLinking öffnet und es bereits eine Aufgabe in MainActivity gibt, ich einen Benutzer auffordere, entweder die aktuelle Aufgabe abzubrechen und eine neue Aufgabe zu starten (was von Deep Linking ist). Das Problem ist, wenn ich eine andere Aktivität von MainActivity öffnen und Benutzer von DeepLinking Intent kommt. Dann würde es die zweite Aktivität beenden und MainActivity direkt öffnen. Was ich erreichen möchte, ist, dass, wenn App/Aktivität nicht läuft, Intent von DeepLink geöffnet ist wie es ist. Und wenn Aktivität/App bereits ausgeführt wird, fordere ich den Benutzer auf, entweder die aktuelle Aufgabe zu schließen und DeepLink-Aufgabe/Absicht auszuführen.

+0

Verwenden Sie dieses Android: launchMode = "singleInstance" anstelle von Android: launchMode = "singleTask". Ich hoffe, es wird funktionieren. –

+0

Ich habe singleInstance vorher verwendet und in diesem Fall, wenn ich die App wieder aktiviere und durch Antippen des App-Symbols wieder öffne, wird zuerst Splash angezeigt, anstatt den letzten Status anzuzeigen. Und auch ich bekomme eine seltsame Animation in allen Aktivitäten laden mit singleInstance –

+0

poste dein komplettes Manifest –

Antwort

0

Das funktioniert nicht so, wie Sie es denken. Sie versuchen, launchMode="singleTask" zu verwenden, aber da Sie "taskAffinity" nicht auch gesetzt haben, ignoriert Android ziemlich Ihr launchMode.

Sie sollten keinen der speziellen Startmodi "singleTask" oder "singleInstance" verwenden müssen, um zu bekommen, was Sie wollen.

Versuchen Sie mit singleTop Startmodus und sehen, ob dies Ihr Problem löst. Wenn ActivityMain bereits geöffnet ist und Sie ActivityMain erneut mit Ihrem Deep-Link starten, sollte onNewIntent() in ActivityMain aufgerufen werden.

Sie können auch auf my answer to this question, die auf eine Art und Weise eine static Variable zu zeigen, was Activity zu bestimmen, beschreibt basiert auf der Verwendung in dem Stapel, um zu entscheiden, ob eine weitere Activity ist oder nicht.

+0

Im Fall singleTop wird die Aktion What if SignIn geöffnet, die eine untergeordnete Aktivität von ActivityMain ist. Und ich öffne MainActivity von DeepLink, dann öffnet es Hauptaktivität, indem es seine neue Instanz in neuer Aufgabe erstellt und beim Zurückklicken zeigt es wieder SignIn Aktivität und auf einem weiteren Zurückdruck zeigt es wieder ActivityMain –

+0

Ja. Das ist richtig. Was möchten Sie in diesem Fall tun? –

+0

Ich möchte den Navigationsfluss beibehalten, wenn Flow ActivityMain> SignIn-Aktivität war und der Benutzer ActivityMain erneut von DeepLink aus starten möchte, dann möchte ich den Benutzer fragen, ob er die SignIn-Aktivität verlassen möchte oder nicht, wenn ja, dann ActivityMain mit Deeplink-Task anzeigen Status, sonst show Vorherig, zeige SignIn-Aktivität. Und wenn Benutzer von SignIn zu Hauptaktivität zurückgehen, sollte es vorherigen ActivtyMain Zustand –