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 创建用于接收导航意图。
我使用 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.
,您必须在清单中将启动模式用作 singleTopandroid: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 创建用于接收导航意图。