8

Notification私はしばらく s を使用してきましたが、昨日PendingIntent、メソッドに渡されるインテントには次のセットPendingIntent.getActivity()が必要であるとのドキュメントに記載されていることに気付きました。FLAG_ACTIVITY_NEW_TASK

アクティビティは既存のアクティビティのコンテキスト外で開始されるため、インテントで Intent.FLAG_ACTIVITY_NEW_TASK 起動フラグを使用する必要があることに注意してください。

ただし、s を使用するときにこのフラグを設定したことはNotificationありませんが、これまでのところ問題は発生していません。が参照しているに対して が設定されていないNotificationの例をいくつか見てきました。特に、公式ガイドには以下のスニペットが示されています。FLAG_ACTIVITY_NEW_TASKIntentPendingIntent

Context context = getApplicationContext();
CharSequence contentTitle = "My notification";
CharSequence contentText = "Hello World!";
Intent notificationIntent = new Intent(this, MyClass.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);

ご覧のとおり、彼らはFLAG_ACTIVITY_NEW_TASKフラグを立てていません。だから私の質問は、をFLAG_ACTIVITY_NEW_TASK使用するときに常にフラグを設定するPendingIntent.getActivity()必要がありますか、または省略できるシナリオがいくつかありますか? 特に、Notifications を使用する場合、このフラグを設定せずに Intent を使用できますか?

4

2 に答える 2

1

システムが通知用に設定していると思います。通知から起動すると、新しいタスクを取得します。

于 2012-12-13T22:46:23.830 に答える
1

はい、使用する必要がありますFLAG_ACTIVITY_NEW_TASK。そうしないと、一部のデバイスで予期しない動作が発生する可能性があります。

今日 (2017 年 3 月 25 日) の時点で、質問にリンクされている公式ガイドには、次の更新されたコード スニペットがあります。

// Creates an Intent for the Activity
Intent notifyIntent =
        new Intent(this, ResultActivity.class);
// Sets the Activity to start in a new, empty task
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                        | Intent.FLAG_ACTIVITY_CLEAR_TASK);
// Creates the PendingIntent
PendingIntent notifyPendingIntent =
        PendingIntent.getActivity(
        this,
        0,
        notifyIntent,
        PendingIntent.FLAG_UPDATE_CURRENT
);
于 2017-03-26T02:59:05.563 に答える