android - 当应用程序具有 MediaBrowserService 时,Videoview 窃取媒体按钮事件
问题描述
我正在使用 aVideoview
在循环中播放动画视频。我注意到,每当视频播放时,如果任何其他音乐应用正在播放音频并且我点击headset buttons(pause/play)
,媒体按钮事件都不会发送到音乐播放应用。相反,它被分派到 my ExampleService
which extends from MediaBrowserServiceCompat
。Videoview
正在窃取那些媒体按钮事件。我正在使用偶数AudioManager.AUDIO_FOCUS_NONE
。
我注意到当我的应用程序打开并播放视频时,我可以在堆栈跟踪中看到一个日志
D/MediaSessionService: Media button session is changed to com.example.mediasessiontest/ExampleService (userId=0)
有没有办法在不请求Mediabutton
事件的情况下播放视频?
- 如果我不在我的应用中播放视频,耳机事件会正确路由到正在播放音乐的应用
- 这仅发生在
Android 8 and 9
. 工作正常Android 10
。 甚至尝试
Surfaceview
播放Mediaplayer
视频。但观察到同样的问题。private val VIDEO_BASE_PATH = "android.resource://" videoView.setAudioFocusRequest(AudioManager.AUDIOFOCUS_NONE) videoView.setMediaController(null) videoView.setVideoPath(VIDEO_BASE_PATH + packageName + "/" + R.raw.test_video) videoView.setOnPreparedListener { player -> player.isLooping = true player.start() //This causes the media button sesssion to be changed }
也尝试使用
Surfaceview
withMediaplayer
。但同样的结果。看起来像操作系统中的错误8 and 9
?
解决方案
推荐阅读
- android - 带有关闭通知操作按钮的多个通知
- opengl-es - 使用 android ndk 中的 Augmented Face API 渲染 3D 网格面罩
- c# - Linq Lambda 表达式 - 左连接
- python - Python对值进行排序并根据唯一键对它们进行分组
- linux - 从远程网站下载 PDF 文件
- laravel - 如何将数据发送到 laravel voyager 管理面板中的自定义按钮
- c# - 如何在通知期间调用 XAMARIN iOS 中的 AVPlayer 而不是 30 秒的最大持续时间通知声音?
- c - GTK_TOGGLE_BUTTON() 宏期间的段错误。更改复选框状态后更改的指针值
- firebase - Firebase:FieldValue.arrayUnion 与对象
- ios - UICollectionView 在 iOS 11 上覆盖全屏