Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 单击通知后返回到当前正在运行的活动_Android_Android Intent_Android Activity_Android Notifications_Android Pendingintent - Fatal编程技术网

Android 单击通知后返回到当前正在运行的活动

Android 单击通知后返回到当前正在运行的活动,android,android-intent,android-activity,android-notifications,android-pendingintent,Android,Android Intent,Android Activity,Android Notifications,Android Pendingintent,我有以下问题: 我写了一个android服务——一个音乐播放器——在后台运行,并在启动时发出通知。单击此通知将打开允许与此播放机交互的活动A。这个很好用 问题是当我运行第三方活动(例如,web浏览器)并单击通知时。单击会将我带到活动A,但单击后退按钮(这就是问题所在)会将我带到主屏幕。相反,我想 恢复以前运行的活动,即web浏览器 有人知道怎么做吗 private void initNotification(){ Intent resultIntent = new Intent

我有以下问题: 我写了一个android服务——一个音乐播放器——在后台运行,并在启动时发出通知。单击此通知将打开允许与此播放机交互的活动A。这个很好用

问题是当我运行第三方活动(例如,web浏览器)并单击通知时。单击会将我带到活动A,但单击后退按钮(这就是问题所在)会将我带到主屏幕。相反,我想 恢复以前运行的活动,即web浏览器

有人知道怎么做吗

    private void initNotification(){

    Intent resultIntent = new Intent(this, AudioPlayerActivity.class);
    //resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    stackBuilder.addParentStack(AudioPlayerActivity.class);
    stackBuilder.addNextIntent(resultIntent);

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

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
    mBuilder.setSmallIcon(...);
    mBuilder.setContentTitle("...");
    mBuilder.setContentText("...");
    mBuilder.setContentIntent(resultPendingIntent);


    // create a notification manager that then displays the notification
    NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
}

我不认为这是你需要处理的事情。这取决于已经运行的应用程序

我刚刚试了两次。在第一个案例中,whatsapp正在运行,然后打开一个通知并按下后退按钮,我被带回whatsapp。在第二种情况下,我让chrome运行,点击通知返回,我被带回到主屏幕


在第二种情况下,chrome可能会对其当前活动调用finish(),该活动会被销毁,并且backbackback中没有更多的活动,因此它会将您带回主屏幕

您的问题是如何使用
TaskStackBuilder
。不幸的是,这个类对您希望如何管理应用程序做了很多假设。使用
TaskStackBuilder
构建
pendingent
堆栈时,它会将以下标志添加到“根”
Intent

 intents[0].addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
            Intent.FLAG_ACTIVITY_CLEAR_TASK |
            Intent.FLAG_ACTIVITY_TASK_ON_HOME);
(注意:此代码段来自Android 4.1.1中的
TaskStackBuilder

由于设置了主页上的
Intent.FLAG\u ACTIVITY\u TASK\u
,因此它会在主屏幕的顶部启动任务,而不是在用户当前任务的顶部启动任务

如果可以避免使用
TaskStackBuilder
,则可以绕过此问题。如果确实需要构建活动堆栈,可以使用
pendingent.getActivities()
,在这里可以控制在每个
Intent
中设置哪些标志。否则,只需使用
pendingent.getActivity()
创建放入
通知中的
pendingent


注意:编辑以添加示例代码

试试这个:

private void initNotification(){
    Intent resultIntent = new Intent(this, AudioPlayerActivity.class);
    resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
    mBuilder.setSmallIcon(...);
    mBuilder.setContentTitle("...");
    mBuilder.setContentText("...");
    mBuilder.setContentIntent(resultPendingIntent);
    // create a notification manager that then displays the notification
    NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
}

谢谢你的快速回复。我用Firefox和后台进程(任务管理器)的通知在我的设备上进行了尝试。然后返回Firefox。然而,当我点击我的应用程序生成的通知时,它会返回主菜单。不,这实际上是你可以控制的行为。这完全取决于您在
通知
中的
挂起内容
中设置的
意图
标志。再次感谢!我明天会试试,让你知道这是怎么回事。好消息。我以前从未用过这面旗子。嗨,大卫!谢谢你的回答。我试图省略TaskStackBuilder并使用PendingEvent.getActivities(),但结果保持不变。您能否简要介绍一下(可能使用一些伪代码)如何将taskStackBuilder与PendingEvent.getActivities()结合使用?先谢谢你。