94

Android では、アクティビティ ExampleActivity を定義しました。

私のアプリケーションが起動されたとき、この A-Activity のインスタンスが作成されましたA。ユーザーが のボタンをクリックするとA、B-Activity の別のインスタンス B が作成されました。現在、タスク スタックは BA で、B が一番上にあります。次に、ユーザーが C-Activity の別のインスタンスである B のボタンをクリックすると、C が作成されました。現在、タスク スタックは CBA で、C が一番上にあります。

ここで、ユーザーが C のボタンをクリックすると、アプリケーションが A をフォアグラウンドに移動するようにします。つまり、A をタスク スタック ACB の一番上に配置します。

それを実現するコードをどのように書くことができますか?

4

9 に答える 9

113

これを試すことができますFLAG_ACTIVITY_REORDER_TO_FRONT(ドキュメントはあなたが望むものを正確に説明しています)

于 2010-02-10T07:33:02.047 に答える
66

これを行うために私が見つけた最良の方法は、Android のホーム画面が使用するものと同じインテント (アプリ ランチャー) を使用することでした。

例えば:

Intent i = new Intent(this, MyMainActivity.class);
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i);

このようにして、ユーザーが最近使用したパッケージ内のアクティビティが再び最前面に戻されます。これは、サービスの PendingIntent を使用してユーザーをアプリに戻すのに役立つことがわかりました。

于 2010-07-12T09:12:55.447 に答える
28

これを行う方法のコード例を次に示します。

Intent intent = getIntent(getApplicationContext(), A.class)

これにより、スタック上にアクティビティのインスタンスが 1 つだけあることが保証されます。

private static Intent getIntent(Context context, Class<?> cls) {
    Intent intent = new Intent(context, cls);
    intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    return intent;
}
于 2012-02-13T11:36:59.840 に答える
12

FLAG_ACTIVITY_REORDER_TO_FRONT : Context.startActivity() に渡される Intent に設定されている場合、このフラグにより​​、起動されたアクティビティが既に実行されている場合、そのタスクの履歴スタックの先頭に移動されます。

Intent i = new Intent(context, AActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(i);
于 2012-10-16T13:35:25.423 に答える
4

Intentフラグの組み合わせがうまくいくはずだと思います。特に、Intent.FLAG_ACTIVITY_CLEAR_TOPIntent.FLAG_ACTIVITY_NEW_TASK.

を呼び出す前に、これらのフラグをインテントに追加してくださいstartActvity

于 2010-02-09T23:10:47.467 に答える
2

i.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);

注 homeactivity launchmode は single_task である必要があります

于 2015-01-15T13:07:27.483 に答える
1

一般に、このアクティビティ管理方法は推奨されないと思います。The Stack で 2 ステップ下のアクティビティを再アクティブ化する際の問題は、このアクティビティが強制終了された可能性が高いことです。あなたの活動の状態を覚えて、それらを起動するように私のアドバイスstartActivity ()

このページを見たことがあると思いますが、便宜上、このリンクを

于 2010-02-10T03:44:01.460 に答える
0

通知をクリックしたときにアクティビティをスタックの一番上に移動したい場合は、FLAG_ACTIVITY_REORDER_TO_FRONT を機能させるために次の操作が必要になる場合があります。

これに対する私にとっての解決策は、通知がトリガーするブロードキャスト アクションをリッスンするブロードキャスト レシーバーを作成することでした。だから基本的に:

  1. 通知は、起動するアクティビティの名前を追加して、ブロードキャスト アクションをトリガーします。

  2. ブロードキャスト レシーバーは、通知がクリックされたときにこれをキャッチし、FLAG_ACTIVITY_REORDER_TO_FRONT フラグを使用してそのアクティビティを起動するインテントを作成します。

  3. アクティビティはアクティビティ スタックの一番上に移動され、重複はありません。

于 2015-06-12T20:08:24.587 に答える
-2

「Google クラウド メッセージ」を使用して「PendingIntent」クラスでプッシュ通知を受信して​​いる場合、次のコードは通知をアクション バーにのみ表示します。

アクティビティが作成されないという通知をクリックすると、最後のアクティブなアクティビティが復元され、現在の状態が問題なく保持されます。

Intent notificationIntent = new Intent(this, ActBase.class); **notificationIntent.setAction(Intent.ACTION_MAIN); notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);** PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle("Localtaxi") .setVibrate(vibrate) .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)) .setAutoCancel(true) .setOnlyAlertOnce(true) .setContentText(msg);

mBuilder.setContentIntent(contentIntent);

NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);

mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());

チャオ!

于 2014-06-19T07:26:54.327 に答える