使用 MediaButton 控制后台有音频的前台应用程序(无音频)

Use MediaButton to control foreground app (no audio) with audio in background

我想使用媒体按钮来控制前台应用程序,但不能用于音频。 所以我们的目标是检测按钮点击以在应用程序中执行某些操作。

我可以通过使用 MediaSessionMediaButtonReceiver 来实现。

问题是在使用应用的时候,用户经常在后台播放音乐,所以后台应用的音频焦点接管了MediaSession,我无法再控制我的应用。

有办法实现吗?使用 onKeyDown 直接监听按钮点击似乎不起作用。

遗憾的是,无法同时激活两个 MediaSession。如果另一个应用程序正在播放音乐并且 运行 MediaSession 那么您的应用程序没有焦点并且不活跃......这是有目的的 - 更好的用户体验 - 只有一个“播放器”应用程序可以播放音乐(或视频)。如果这不会像那样工作并且您可以同时通过几个应用程序播放音乐那么媒体按钮应该如何工作例如耳机? pasuing/resuming所有玩家?这对用户不友好,因此 Android 团队引入了 MediaSession 模式,并带有选项,可以通过任何应用程序调用“现在关注我”,但随后另一个应用程序/MediaSession 暂停并没有没有得到任何输入(这个活动会话有)

如果您需要按下物理按钮,那么 onKeyDown 应该可以工作(在 Activity 内或最终使用 AccessibilityService,这将在整个系统中“全局”工作)。如果你需要一些屏幕上的通知按钮按下,那么只要让 custom layout for your notification 有你喜欢的按钮,甚至可以设置为播放器

请注意,在 Android 11 个活动 MediaSession 中,当您下拉状态栏时,通知会粘在通知部分的顶部。您的自定义通知将位于所有其他通知的下方(您可以使用 notification/channel 的优先级参数稍微操纵位置)