0

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

我可以通过使用MediaSessionMediaButtonReceiver. 看这里

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

有没有办法做到这一点?直接监听按钮点击onKeyDown似乎不起作用。

4

1 回答 1

1

可悲的是,两个 active MediaSessions 无法同时使用。如果另一个应用程序正在播放音乐并运行,MediaSession那么你的应用程序没有焦点并且没有激活......这是为了目的 - 更好的用户体验 - 只有一个“播放器”应用程序可以播放音乐(或视频)。如果这不起作用,并且您可以一次通过几个应用程序播放音乐,那么应该如何使用耳机上的媒体按钮?暂停/恢复所有玩家?这只是对用户不友好,因此 Android 团队引入了MediaSession模式,可以选择任何应用程序调用“现在专注于我”,但随后另一个应用程序/MediaSession暂停并且没有得到任何输入(此活动会话确实如此)

如果您需要按下物理按钮,那么onKeyDown应该可以工作(在内部Activity或最终使用AccessibilityService,这将在整个系统中“全局”工作)。如果您需要一些屏幕上的通知按钮,那么只需为您的通知制作自定义布局,使用尽可能多的按钮,甚至可以设置为播放器

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

于 2021-01-08T07:25:37.473 回答