25

私はGCMを実装しています。私のアプリには、 sayAとの 2 つのアクティビティがありBます。Bこのコードを使用して、NotificationBarから起動しています。

long when = System.currentTimeMillis();
NotificationManager notificationManager =
    (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
String title = context.getString(R.string.app_name);        
Notification notification = new Notification(R.drawable.app_notification_icon, "De Centrale", when);//message
Intent notificationIntent = new Intent(context, B.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); //|Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
notification.setLatestEventInfo(context, title, msg, intent);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(0, notification);

NotificationBar はB、「B-notification-intent」などのインテントでアクティビティを開きます。次に、[戻る] ボタンを使用してアクティビティを開き、新しいインテント (「BA-intent」など) を使用して起動Aします。以下のコードを使用します。BBA

intent = new Intent(this, B.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);              
startActivity(intent);

そして、新しいデータを取得Bします(つまり、画面Bが更新されます)。しかし、ホームボタンを押してから最近のアプリからアプリケーションを起動するBと、「B-notification-intent」で古い画面が表示されます。代わりに、最新のインテント、つまり「BA-intent」が必要です。私はでこのコードを使用していますB:

@Override
protected void onCreate(Bundle b)
{
    fetchDataFromDB(getIntent());           
}

@Override
protected void onNewIntent(Intent intent)
{
    fetchDataFromDB(intent);        
}

誰かが私の現在の画面(意図)を取得するのを手伝ってください。

4

2 に答える 2

43

また、Recents から起動したときにActivityonCreate()古くなることもあることに気付きましたが、適切に処理できるようにそれを確認する方法があります。IntentIntent

ジャワ:

protected boolean wasLaunchedFromRecents() {
    return (getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY;
}

コトリン:

fun wasLaunchedFromRecents(): Boolean {
    val flags: Int = intent.flags and Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
    return flags == Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
}

私の謙虚な意見では、そのフラグの名前は不適切です (Recents リストを参照する他のフラグは、実際にはその単語を使用します。たとえばFLAG_ACTIVITY_EXCLUDE_FROM_RECENTSFLAG_ACTIVITY_RETAIN_IN_RECENTS)。多くの一般的な Android デバイスには、Recents 専用のボタンがあるという事実を反映するようにドキュメントが更新されることはありません。

通常、このフラグはアプリケーション コードによって設定されませんが、このアクティビティが履歴から起動されている場合 (ホーム キーを長押し)、システムによって設定されます。

(注: 何年も前に別の方法で問題を解決したことは承知していますが、この質問は「android old intent recent」の上位の検索結果の 1 つであり、他の関連する質問でこのフラグについて言及されていないため、この回答が他の人に役立つことを願っています。 .)

于 2015-04-07T10:22:45.177 に答える