カスタム タブ アクティビティを使用して、ユーザーがアプリ内で小さなナビゲーションを実行できるようにしようとしています。
インテント フィルターは問題ありません。スターター アクティビティも問題ありません。ブラウザも問題ありません。しかし、ブラウザタブは自動的に作成され、アクティビティが破棄され、すべての状態が失われます。
なぜ?ここにコードがあります
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
this.caller = savedInstanceState.getString("caller", null);
}
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
outState.putString("caller", this.caller);
super.onSaveInstanceState(outState);
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getIntent().getBooleanExtra("starting", false)) {
this.caller = getIntent().getStringExtra("caller"); //THIS IS ALWAYS != NULL, i've debugged and check
Intent intent = new CustomTabsIntent.Builder().setUrlBarHidingEnabled(true).setShowTitle(false).build().intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY).setData(Uri.parse(URL_BUILDER.buildLoginUrl()));
PendingIntent pi = PendingIntent.getActivity(this, 123, intent, PendingIntent.FLAG_IMMUTABLE);
if (hasChrome())
intent.setPackage("com.android.chrome");
this.customTabLauncher.launch(new IntentSenderRequest.Builder(pi).setFillInIntent(intent).build());
} else Sytem.out.println(this.caller);
}
ここで何が起こるか、いくつかのアクティビティから、インテントの「開始」フィールドと「発信者」フィールドを渡す上でこのアクティビティを開始します。これは正常に動作し、すでにデバッグしてチェックしました...しかし、どこでも終了を呼び出さずに、このアクティビティ閉じられると、customtab を返すためのすべての情報が失われます
私のマニフェストでは
<activity
android:name="com.tomatedigital.androidutils.CustomTab"
android:exported="true"
tools:node="merge">
<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="cct.face.otarios"
android:scheme="test" />
</intent-filter>
</activity>
私の行方不明は何ですか?デバッグ セッションonSaveInstanceState
で呼び出されているのを見たことがありますが、復元は決して行われません。