从通知打开应用程序

Opening application from notification

假设我们有 Activity 显示有趣的图片并将其命名为 FunnyActivity。这个 Activity 可以从 MainActivity 启动,它是应用程序中的基础 Activity,点击按钮后。我们有时也想推送一些通知,当用户点击通知时,这个 FunnyActivity 应该被启动。所以我们添加这部分代码:

    Intent notificationIntent = new Intent(this, FunnyActivity.class);
    notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    PendingIntent intent = PendingIntent.getActivity(this, (int) System.currentTimeMillis(), notificationIntent, 0);

并且此 PendingIntent 正在通知生成器中使用

setContentIntent(intent)

当然,FunnyActivity 启动得很漂亮,但我们希望在用户单击 FunnyActivity 上的后退按钮时打开 MainActivity。

我们怎样才能做到这一点?请记住,当用户返回 MainActivity 时,他可以通过按钮再次打开 FunnyActivity。

试试这个:

// Intent for the activity to open when user selects the notification
Intent detailsIntent = new Intent(this, DetailsActivity.class);

// Use TaskStackBuilder to build the back stack and get the PendingIntent
PendingIntent pendingIntent =
        TaskStackBuilder.create(this)
                        // add all of DetailsActivity's parents to the stack,
                        // followed by DetailsActivity itself
                        .addNextIntentWithParentStack(upIntent)
                        .addNextIntent(detailsIntent);
                        .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

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

来源:Create back stack when starting the activity

你可以试试这个:

TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
Intent resultIntent = new Intent(this, FunnyActivity.class);

                    // Adds the back stack
                    stackBuilder.addParentStack(MainActivity.class);
                    // Adds the Intent to the top of the stack
                    stackBuilder.addNextIntent(resultIntent);

Intent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

                    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)/*.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher))*/
                            .setSmallIcon(R.mipmap.ic_launcher)
                            .setContentTitle(title)
                            .setContentText(msg)
                            .setContentIntent(resultPendingIntent)
                            .setAutoCancel(true);

这就是您解决问题的方法。希望对你有帮助