为了账号安全,请及时绑定邮箱和手机立即绑定

通知总是创建新活动而不是恢复以前的活动

通知总是创建新活动而不是恢复以前的活动

一只甜甜圈 2021-09-12 10:37:40
我正在制作一个音乐应用程序,它在播放音频时显示通知。单击时,此通知将通过意图打开主 (UI) 活动。虽然这应该是一个非常简单的过程,但出于某种原因,无论我做什么,当按下通知时,主要活动总是会被破坏。我已经尝试过 singleTop、singleTask(都作为意图标志和清单值)、保存实例状态包、onNewIntent,基本上任何接近我能找到的解决方案的东西。但活动总是被破坏。我只能通过 getIntent 获取意图。主要活动:https : //pastebin.com/32uuK33E音频服务:https : //pastebin.com/ShiUfBMc清单:https : //pastebin.com/kPp7RSYK因为“到 pastebin 的链接必须附有代码”这是意图(我已经尝试了相关标志的所有组合,所以我真的怀疑这就是问题所在)// creates an intent which opens the application when the notification is pressed        private PendingIntent getPendingIntent(Context context) {            Intent intent = getIntent(this);            TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);            stackBuilder.addNextIntent(intent);            return stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);        }        // returns an intent which resumes the Main Activity and passes various song information        private Intent getIntent(Context context) {            int duration = player != null ? player.getDuration() : 0;            boolean playing = player != null && player.isPlaying();            Intent intent = new Intent(this, MainActivity.class);            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);            intent.putExtra(MediaPlayerContract.INTENT_EXTRA_SONG_INFO, getSongInfo());            intent.putExtra(MediaPlayerContract.INTENT_EXTRA_POS, currentQueuePos);            intent.putExtra(MediaPlayerContract.INTENT_EXTRA_DURATION, duration);            intent.putExtra(MediaPlayerContract.INTENT_EXTRA_IS_PLAYING, playing);            return intent;        }
查看完整描述

3 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

您可以为活动使用启动模式

<activity android:name=".MainActivity"
          android:launchMode="singleTop"

singleTop:如果目标任务的顶部已经存在活动的实例,则系统通过调用其 onNewIntent() 方法将意图路由到该实例,而不是创建活动的新实例。


查看完整回答
反对 回复 2021-09-12
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

我已经解决了这个问题。我需要在媒体会话中调用 setSessionActivity() 方法,如下所示:


Intent intent = new Intent(context, MainActivity.class);

        PendingIntent pendingIntent = PendingIntent.getActivity(context, MediaPlayerContract.REQUEST_CODE,

                intent, PendingIntent.FLAG_UPDATE_CURRENT);

mediaSessionCompat.setSessionActivity(pendingIntent);

编辑:


您还可以通过简单地调用来创建意图


setContentIntent(controller.getSessionActivity())

在调用 setSessionActivity 之后,控制器是你的 MediaSessionController。


查看完整回答
反对 回复 2021-09-12
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

尝试删除 flag:Intent.FLAG_ACTIVITY_CLEAR_TOP 并添加下一个:Intent.FLAG_ACTIVITY_REORDER_TO_FRONT


查看完整回答
反对 回复 2021-09-12
  • 3 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信