本文共 1998 字,大约阅读时间需要 6 分钟。
在Android应用中,当通知通知用户点击后,用户通常会按返回键退出应用。但在Gmail等应用中,由于需要在邮件列表页面再次点击返回键才能退出,这种设计可能会影响用户体验。
为了实现类似Gmail的行为,我们需要在应用中定义两个Activity:ParentActivity和SubActivity。当通知点击后,跳转到SubActivity,按返回键后,系统会退回到ParentActivity,再按返回键才能退出应用。
在这种简单场景中,我们只需要在PendingIntent中指定SubActivity。默认情况下,Android系统会将当前的Activity替换为新的Activity。
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
如果需要退回到ParentActivity,我们需要在PendingIntent中设置多个跳转目标。我们可以使用getActivities()方法来指定一系列目标Activity。
Intent[] intents = new Intent[2];intents[0] = Intent.makeRestartActivityTask(new ComponentName(context, MainActivity.class));intents[1] = new Intent(context, SubActivity.class);PendingIntent contentIntent = PendingIntent.getActivities(context, 0, intents, PendingIntent.FLAG_CANCEL_CURRENT);
android:launchMode="singleTask"和android:taskAffinity="",以避免多次启动同一个Activity。makeRestartActivityTask和getActivities方法,确保Activity栈能够正确管理,防止重复或错误的跳转。// 创建Activity数组Intent[] makeIntentStack(Context context) { Intent[] intents = new Intent[2]; intents[0] = Intent.makeRestartActivityTask(new ComponentName(context, MainActivity.class)); intents[1] = new Intent(context, SubActivity.class); return intents;}// 创建并显示Notificationvoid showNotification(Intent intent) { Notification notification = new Notification(R.drawable.status_icon, "Hello World ticker text", System.currentTimeMillis()); PendingIntent contentIntent = PendingIntent.getActivities(this, 0, makeIntentStack(this), PendingIntent.FLAG_CANCEL_CURRENT); notification.setLatestEventInfo(this, "Title", "Hey, shall we have dinner tonight?", contentIntent); notification.flags |= Notification.DEFAULT_ALL; mNM.notify(1, notification);} 通过以上方法,我们可以实现类似Gmail的通知跳转场景,确保用户按返回键后能够正确退回到ParentActivity。
转载地址:http://nusk.baihongyu.com/