0

A と B の 2 つの Android アプリケーションがあります。

アプリケーション B には 2 つのアクティビティがあり、そのランチャー アクティビティをアクティビティ 1 と呼び、別のアクティビティをアクティビティ 2 と呼びます。

アプリケーション A は、アプリケーション B の両方のアクティビティをそれぞれ任意の順序で複数回呼び出す必要があります。

私が見つけたのは、(アプリケーション A から) アクティビティ 2 を呼び出し、後でアクティビティ 1 を呼び出すと、これは機能するということです。

うまくいかないのは、アクティビティ 1 を呼び出した後、いつでもアクティビティ 2 を呼び出す必要がある場合です。

これを行うと、関係なく常にアクティビティ 1 が取得されます。

ログを見ると、ActivityManager が、アプリケーション A のコードで設定したアクティビティ 2 の正しい ComponentName を持つインテントを受け取っていることがわかりますが、それでもアクティビティ 1 に解決されます。

機能した唯一のことは、アクティビティ 1 の onPause() メソッドで finish() を呼び出したときです。これを行うと、アプリケーション A は両方のアプリケーション B のアクティビティを問題なく呼び出すことができます。

これは一般的には良い解決策ではありませんが、既存のアプリ (この場合はアプリ B) が従うことができるアプリケーション A との統合パターンを定義しようとしているので、私にとっては間違いなく解決策ではありません。

(アプリケーション B のアクティビティ構成を変更するのではなく) アプリケーション A からアプリケーション B のアクティビティを呼び出す方法で、この結果を変更する方法はありますか?

現時点では、次のように ComponentName で Activity 1 と Activity 2 の両方を呼び出します。

Intent i = new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
intent.setComponent(name);
context.startActivity(intent);

唯一の違いは、非ランチャー アクティビティ (アクティビティ 2) ではアクション VIEW とカテゴリ DEFAULT を使用していることです (上記の MAIN と LAUNCHER に対して)。

明らかに、アクティビティ 2 には、その組み合わせに一致するインテント フィルターも必要です。

助言がありますか?

4

1 に答える 1

1

さまざまな属性をすでに確認しましたActivityか?android:finishOnTaskLaunchそれが助けになるかもしれないかのように私には思えます。

開発者ガイドで完全なリストを参照してください。

于 2012-06-24T11:17:57.470 に答える