IntentService 在通知单击时恢复 MainActivity

IntentService resume MainActivity on notification click

我使用 GoogleTransitionIntentService 在用户进入地理围栏时显示通知,但通知重新创建 MainActivity.class。我想恢复这个 activity。 https://github.com/googlesamples/android-play-location/tree/master/Geofencing

Intent notificationIntent = new Intent(getApplicationContext(), MainActivity.class);

PendingIntent notificationPendingIntent = 
PendingIntent.getActivity(getApplicationContext(), 0, notificationIntent, 
PendingIntent.FLAG_UPDATE_CURRENT);

NotificationCompat.Builder builder = new NotificationCompat.Builder(this);

builder.setSmallIcon(R.mipmap.ic_launcher)
        .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
        .setColor(Color.RED)
        .setContentTitle(notificationDetails)
        .setContentText("Test")
        .setContentIntent(notificationPendingIntent);

builder.setAutoCancel(true);
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(0, builder.build());

清单:

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:launchMode="singleTask">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

对于给定的 activity.

,您必须在清单中将启动模式用作 singleTop
android:launchMode =  "singleTop"

尝试在清单中为 MainActivity 添加 android:launchMode="singleTop"

您可以添加标志,例如

notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

并设置

android:launchMode =  "singleTop"

到清单中的 activity。

来自 Google 文档

如果 activity 的启动模式为 singleTop(或 up intent 包含 FLAG_ACTIVITY_CLEAR_TOP),父级将被带到堆栈的顶部,并保留其状态。意图由 activity 的 onNewIntent() 方法接收。如果 activity 具有启动模式标准(并且向上意图不包含 FLAG_ACTIVITY_CLEAR_TOP),则当前 activity 及其父项都从堆栈中弹出,并且父项的新实例activity 创建用于接收导航意图。