我想使用媒体按钮来控制前台应用程序,但不能用于音频。所以目标是检测按钮点击以在应用程序中执行某些操作。
我可以通过使用MediaSession
和MediaButtonReceiver
. 看这里
问题是当应用程序被使用时,用户经常在后台播放音乐,所以后台应用程序的音频焦点接管了 MediaSession,我无法再控制我的应用程序了。
有没有办法做到这一点?直接监听按钮点击onKeyDown
似乎不起作用。
我想使用媒体按钮来控制前台应用程序,但不能用于音频。所以目标是检测按钮点击以在应用程序中执行某些操作。
我可以通过使用MediaSession
和MediaButtonReceiver
. 看这里
问题是当应用程序被使用时,用户经常在后台播放音乐,所以后台应用程序的音频焦点接管了 MediaSession,我无法再控制我的应用程序了。
有没有办法做到这一点?直接监听按钮点击onKeyDown
似乎不起作用。
可悲的是,两个 active MediaSession
s 无法同时使用。如果另一个应用程序正在播放音乐并运行,MediaSession
那么你的应用程序没有焦点并且没有激活......这是为了目的 - 更好的用户体验 - 只有一个“播放器”应用程序可以播放音乐(或视频)。如果这不起作用,并且您可以一次通过几个应用程序播放音乐,那么应该如何使用耳机上的媒体按钮?暂停/恢复所有玩家?这只是对用户不友好,因此 Android 团队引入了MediaSession
模式,可以选择任何应用程序调用“现在专注于我”,但随后另一个应用程序/MediaSession
暂停并且没有得到任何输入(此活动会话确实如此)
如果您需要按下物理按钮,那么onKeyDown
应该可以工作(在内部Activity
或最终使用AccessibilityService
,这将在整个系统中“全局”工作)。如果您需要一些屏幕上的通知按钮,那么只需为您的通知制作自定义布局,使用尽可能多的按钮,甚至可以设置为播放器
请注意,在 Android 11 中MediaSession
,当您下拉状态栏时,活动的通知会粘贴到通知部分的顶部。您的自定义通知将位于所有其他通知之间的某个位置(您可以使用通知/通道的优先级参数稍微操纵位置)