Android之媒体按键

博客围绕Android媒体按键展开,指出语音播放切曲时概率出现语音反馈收到但不执行操作的问题。现有方案是模拟媒体按键控制Media Session。经分析,问题可能因语音界面消失时模拟发按键,无focus window致down事件被drop。解决方案是语音客户端配合,直接发按键至media session。

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)发送媒体按键即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shusuanly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值