私は2つの起動方法を持つAndroidアプリを開発しています。1つは、電話のアプリアイコンを押す通常の方法です。もう 1 つの方法は、Web サイトからのディープ リンクを使用する方法です。
ディープリンクは、アプリが何らかの「処理」を行うために必要なデータも送信します。ただし、これは一度だけ行う必要があります。ディープリンク アクティビティが終了すると、メイン アクティビティが開始されます。ただし、(デバイスで) 押し戻して最近のアプリを開くと、ディープリンク アクティビティが再び開きます。
マニフェストの最近のアクティビティからディープリンク アクティビティを除外できます。これにより、最近のアプリからのメインアクティビティも除外されますが、そうではありません。
最近のアプリからディープリンク アクティビティが開始されないようにするにはどうすればよいですか?
私のマニフェスト:
<activity
android:name="MainActivity"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:launchMode="singleTask"
android:theme="@style/AppTheme">
</activity>
<activity
android:name="DeeplinkActivity"
android:label="@string/app_name"
android:noHistory="true"
android:screenOrientation="portrait"
android:launchMode="singleTask"
android:theme="@style/AppTheme">
<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:scheme="app_name" android:host="test" />
</intent-filter>
<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="test" android:path="/" android:scheme="app_name" />
</intent-filter>
</activity>
MainActivity に切り替えるには、次のようにします。
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
編集: この投稿は重複としてマークされました: Android: 「最近のアプリケーション」からアプリを起動すると、インテントで使用されたエクストラの最後のセットで起動します
ただし、その投稿は同じ活動に関するものです。ルート アクティビティを変更したいので、最近のアクティビティからアプリを起動すると、DeeplinkActivity が起動しません。はい、回避策として Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY フラグを確認できます。ただし、ユーザーが最近のアプリからアプリを起動するたびに、不要になった DeeplinkActivity が開かれます。
追加のインテント値の設定またはクリアが機能していないようです。getIntent().getData() からの情報を使用します
これでも重複していると思われる場合は、説明してください。