2

可能重複Deep linking and multiple app instances。私はアプリでDeep Linkingを実装しています。私はマニフェストで定義された意図を扱うランチャーとMainActivityあるスプラッシュ活性を有する: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> 

私はonNewIntent()を処理するために起動モードsingleTaskを設定しています。今私が達成したいのは、ユーザーがDeepLinkingからアクティビティを開き、MainActivityですでに実行中のタスクがある場合、現在のタスクをキャンセルして新しいタスク(深いリンクからのものです)を開始するかどうかをダイアログに表示します。問題は、MainActivityから別のアクティビティを開いて、DeepLinking Intentからユーザーが来た場合です。その後、2番目のアクティビティを終了し、MainActivityを直接開きます。私が達成したいのは、アプリ/アクティビティが実行されていない場合、DeepLinkのインテントがそのまま開いていることです。そして、もしactivity/appがすでに実行されているなら、現在のタスクを閉じてDeepLinkタスク/インテントを実行するようにユーザーに促します。

+0

android:launchMode = "singleTask"の代わりに、このandroid:launchMode = "singleInstance"を使用してください。それが動作することを願っています。 –

+0

私は前にsingleInstanceを使用していました。その場合、アプリを再開してアプリアイコンをタップして再び開くと、最後の状態を表示する代わりにスプラッシュが最初に表示されます。また、私はすべてのアクティビティ読み込みで奇妙なアニメーションを取得するには、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アクティビティを終了するかどうかを確認するメッセージを表示したい場合はyesとし、それ以外の場合は、前にshowinアクティビティを表示し続ける。ユーザーがSignInからMainアクティビティに戻ると、以前のActivtyMain状態が表示される –

関連する問題