私には2つの活動があります
MainActivity
DeepLinkActivity
NavUtils
アドバイスに従って上へ移動するためにすべてを設定しましたここ、ここそしてここ。
私が達成したいことは次のとおりです。
DeepLinkActivity
ディープリンクから開始- 上を押す
- へ移動
MainActivity
最近使用したアプリに自分のアプリのタスクがある限り、すべて正常に動作します。
ただし、最近使用したアプリからアプリをスワイプすると、次のように動作します。
- 最近使ったアプリからアプリをスワイプして消す
DeepLinkActivity
ディープリンクから開始- 上を押す
- 戻るボタンを押すとアプリが閉じる
コードをデバッグして、 がNavUtils.shouldUpRecreateTask()
を返すことがわかりましたfalse
。upIntent
私の設定と同様に、すべてが通常に設定されていますComponent
。しかし、それでも のNavUtils.navigateUpTo()
呼び出しと同じように動作しますfinish()
。ログ ステートメントも何も表示されません。
それをどう修正するか、何かアイデアはありますか?
AndroidManifest.xml
<activity
android:name=".DeepLinkActivity"
android:parentActivityName="my.package.MainActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="my.package.MainActivity"/>
<intent-filter>
<!-- Some intent filter -->
</intent-filter>
</activity>
ディープリンクアクティビティ.java
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent upIntent = NavUtils.getParentActivityIntent(this);
if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
// create new task
TaskStackBuilder.create(this).addNextIntentWithParentStack(upIntent)
.startActivities();
} else {
// Stay in same task
NavUtils.navigateUpTo(this, upIntent);
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
- - - 編集 - - -
いくつかの Google アプリが同じように壊れていることに気付きました。たとえば、検索から連絡先にジャンプする場合、AB で上を押すと、連絡先アプリではなくホーム画面が表示されます。(API19/cm11)
ベストアンサー1
OP の問題に対する私の解決策:
public void navigateUp() {
final Intent upIntent = NavUtils.getParentActivityIntent(this);
if (NavUtils.shouldUpRecreateTask(this, upIntent) || isTaskRoot()) {
Log.v(logTag, "Recreate back stack");
TaskStackBuilder.create(this).addNextIntentWithParentStack(upIntent).startActivities();
} else {
NavUtils.navigateUpTo(this, upIntent);
}
}
isTaskRoot()
はtrueを返しますディープリンクアクティビティタスクのルートです (アプリケーションの最初の起動、またはアプリケーションはタスク マネージャーによって以前に終了されています)。この方法では、アプリケーション タスクがすでにフォアグラウンドにあるときにリンクを介してアクティビティが起動された場合、既存のバック スタックが失われることはありません。