Android之媒体按键
一、问题描述
语音播放上一首/下一首,概率出现语音反馈收到,但是不执行切曲操作(蓝牙音乐)
二、现有方案
使用语音控制媒体时,模拟媒体按键,控制当前激活状态的Media Session来响应媒体按键。
参考getInstrumentation().sendKeySync(event);
三、问题分析
问题出现时,发现有如下打印,猜测为刚好语音的界面消失时模拟发送了媒体按键,由于卡点刚好没有focus window,会导致down事件被drop掉,仅成功发送了up事件至media session。
12-03 17:15:47.053 2209 2209 W ViewRootImpl[MainActivity]: Dropping event due to no window focus: KeyEvent{ action=ACTION_DOWN, keyCode=KEYCODE_MEDIA_NEXT, scanCode=0, metaState=0, flags=0x8, repeatCount=0, eventTime=13148421, downTime=13148421, deviceId=-1, source=0x101 }
12-03 17:15:47.072 718 25305 D MediaSessionService: Sending KeyEvent { action=ACTION_UP, keyCode=KEYCODE_MEDIA_NEXT, scanCode=0, metaState=0, flags=0x8, repeatCount=0, eventTime=13148442, downTime=13148442, deviceId=-1, source=0x101 } to com.bw.source/BluetoothMediaService (userId=0)
四、解决方案
需要语音客户端来配合优化,直接将媒体按键发送至media session,
调用KeyEvent.isMediaKey(int keyCode)判断是否媒体按键,
如为媒体按键调用audioManager.dispatchMediaKeyEvent(KeyEvent keyEvent)发送媒体按键即可。
博客围绕Android媒体按键展开,指出语音播放切曲时概率出现语音反馈收到但不执行操作的问题。现有方案是模拟媒体按键控制Media Session。经分析,问题可能因语音界面消失时模拟发按键,无focus window致down事件被drop。解决方案是语音客户端配合,直接发按键至media session。

1767

被折叠的 条评论
为什么被折叠?



