如何在没有新意图的情况下从通知回到活动

Hsi*_*ang 19 notifications android android-intent android-mediaplayer

从Android开发,我通过示例代码实现一个简单的通知,但在我的应用程序中,我不想新的意图并再次创建活动,我只想回到我的上一个活动(它是一个媒体播放器UI).如果我使用示例代码,它将创建一个新的活动

Intent resultIntent = new Intent(this, ResultActivity.class);
Run Code Online (Sandbox Code Playgroud)

我评论有关新意图的相关代码并收到通知,但不知道如何回到我上次的活动......

从长按主页键回到我的应用程序并触摸我的应用程序是好的.我想要的就像这种行为.

bleow是Android开发的示例代码,我评论新的意图部分.

NotificationCompat.Builder mBuilder =
    new NotificationCompat.Builder(this)
    .setSmallIcon(R.drawable.notification_icon)
    .setContentTitle("My notification")
    .setContentText("Hello World!");
/*Intent resultIntent = new Intent(this, ResultActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(ResultActivity.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent =
    stackBuilder.getPendingIntent(
        0,
        PendingIntent.FLAG_UPDATE_CURRENT
    );
mBuilder.setContentIntent(resultPendingIntent);*/
NotificationManager mNotificationManager =
    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(mId, mBuilder.build());
Run Code Online (Sandbox Code Playgroud)

[UPDATE]

我认为我需要为活动的意图和适当性设置标志.因此,对于我想要回到我设定的活动

android:launchMode="singleInstance"
Run Code Online (Sandbox Code Playgroud)

因为,我不想从意图开始新的活动,我只想要我的最后一个活动,所以我补充说

Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
Run Code Online (Sandbox Code Playgroud)

从文档我得到了使用Pendingintent.contentIntent它必须包含FLAG_ACTIVITY_NEW_TASK标志,并在使用该标志,如果一个任务已经为你现在开始的活动运行,则新的活动将不会启动; 相反,当前的任务将简单地带到它最后一个状态的屏幕前面.所以我也添加

Intent.FLAG_ACTIVITY_NEW_TASK
Run Code Online (Sandbox Code Playgroud)

但是从logCat,我仍然看到当我触摸返回活动的通知时,pendingintent仍然调用onCreate()函数而不是仅显示仍然"活着"的最后一个活动.

Ste*_*ett 43

如果你想从后台调用Activity,试试这个:

    Intent intent = new Intent(this, YourLauncherActivity.class);
    intent.setAction(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);

    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
            intent, 0);
    mBuilder.setContentIntent(pendingIntent);
Run Code Online (Sandbox Code Playgroud)

如果您在主屏幕上单击通知,则最后显示的应用程序活动将在不启动新内容的情况下到达前台.如果活动被系统杀死,您将获得一个新活动.

  • 有效!谢谢你的大力帮助! (3认同)
  • 那很奇怪。您还在使用android:launchMode =“ singleInstance”吗? (2认同)