小折腾:修改蓝牙耳机按键映射

文章更新:

  20170203 初次成文

问题提出

  一般来说蓝牙耳机上面会有一个按钮,这个按钮起到开启/关闭耳机电源,控制音乐播放,接听/挂断电话等功能,而一般来说,在播放音乐的时候,这个按钮往往起到的都是暂停/播放音乐的作用。但是这个功能对小苏来说好像有些鸡肋:对于一个常听网易云音乐的每日推荐和私人FM的用户来说,如果听到一首歌不喜欢,按一下蓝牙耳机的按钮就能直接切到下一首,这个多帅~于是,修改蓝牙耳机按键映射的想法就在脑袋里面萌生了。

解决方案

  经过查找资料,在安卓系统中,蓝牙耳机按键映射的配置文件的路径在:

/system/usr/keylayout/AVRCP.kl

  在修改这个文件之前,我们最好对这个文件进行备份,备份完成后,我们打开这个文件,文件的内容如下:

  在文件注释部分的最后一行我们可以看到:

#  Key layout used for Bluetooth AVRCP support.

  这句注释注明了这是系统为支持AVRCP协议的蓝牙耳机设定的一份按键映射文件。

  而在文件内容部分中,左边一列:"key 200","key 201"等被称为scancode,通俗地说代表按键类别;而右边的一列:"MEDIA_PLAY","MEDIA_PAUSE"等被称为keycode,通俗地说代表按下对应的按键后,系统要响应的动作。因为小苏的蓝牙耳机只能响应暂停和播放两个动作,那么小苏猜测,在音乐处于正在播放的过程中第一次按下蓝牙耳机的按键时,蓝牙耳机将会将按键类别值"key 201"传递给手机,音乐将会暂停;再按一次,蓝牙耳机将会将按键类别值"key 200"传递给手机,音乐将会恢复正常播放状态。

  为了证实以上猜测,小苏使用KeyTest程序(包名:com.keytest,文末会提供下载)来测试按键被按下时的响应情况:

  在音乐正常播放状态下按下蓝牙耳机按键,KeyTest输出以下结果:

  在音乐处于暂停状态下按下蓝牙耳机按键时:

  以上测试结果也证实了小苏的猜测。

  知道以上原理后,剩下的东西就好办了:在默认情况下,音乐的暂停和播放是由两个按键类型"key 201"和"key 200"控制的,所以小苏应该让"key 201"和"key 200"同时响应"下一曲"的动作就可以了,这样,按下蓝牙耳机按键时,不论音乐处于何种状态,不论系统向手机传回的值是"key 201"还是"key 200",系统都会响应"下一曲"的操作。

  最终修改后的文件内容是这样的:

  文件修改完成后,新的按键映射可能需要重启才能生效(但是在小苏这里新的按键映射似乎不用重启也能生效)。我们再用KeyTest程序来测试一下:

  输出结果表明,不论蓝牙耳机传递给手机的值是"key 201"还是"key 200",都会响应"MEDIA_NEXT"即"下一曲"的操作,而事实上也是这样的,不论音乐处于暂停还是正常播放状态,按下蓝牙耳机按键时,都会转向"下一曲"音乐并开始播放~

  然而在小苏的手机上还是有一个小小的遗憾,不知道在你们的手机上存在不存在:

  在未修改按键映射的情况下,只要手机与蓝牙耳机正常连接并按下蓝牙耳机按键时,即使音乐播放程序没有运行,系统也会自动运行你连接过蓝牙耳机的音乐播放程序并开始播放音乐。但是按上述方法修改过按键映射后,在未运行音乐播放程序的情况下,按下蓝牙耳机按键,系统不会自动播放音乐,而需要手动打开音乐播放程序后,按下蓝牙耳机按键,系统才会播放当前音乐的下一首音乐。不过...就是想要播放当前音乐怎么办?超简单,直接在手机上点击播放按钮就可以了~

  不过手动打开一下音乐播放器也费不了多少事儿,所以这个Bug就暂且忽略吧嘿嘿嘿~

资源下载:

  KeyTest:w com.keytest.apk

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏haifeiWu与他朋友们的专栏

个人博客折腾记

个人博客,也折腾了3年多了吧,不说已经特别稳定了,但起码也做成了自己满意样子,后续还需要继续调整。虽然现在的博客看似简单,并且用的模板,但在博客的这条路上也花了...

31510
来自专栏SAP最佳业务实践

SAP最佳业务实践:FI–应付账款(158)-9 F110使用自动付款程序过账付款

4.10 F110使用自动付款程序过账付款 预付款,贷项凭证和发票之间的差异将被付款程序自动过账。 您可以用经典付款媒介程序或付款媒介工作台来产生付款媒介。在下...

446120
来自专栏花叔的专栏

解读指纹识别、自定义配图、获取发票抬头等小程序API

话说,8月18日微信小程序的开发能力更新了。 关注小程序的读者从版本号就能发现,1.4版本的基础库经历了三个版本,最近上一次版本号是1.4.3,这次是1.5.0...

513100
来自专栏黑白安全

Adobe Acrobat又曝新漏洞:点击恶意PDF文档会“一键被黑”

安全专家总是不厌其烦地劝告人们“不要随意打开来源不明的文件”,最新的案例就来自 Adobe Acrobat 软件的一个漏洞。周二的时候,思科塔洛斯研究人员披露了...

9630
来自专栏Android开发实战

别哭!程序员/开发人员的真实生活:)

各位程序员/开发人员,你们有过上面这些经历么?我是希望会有,如果没有,或许你不算是个真正的程序员/开发人员啊。O(∩_∩)O~

10920
来自专栏黑白安全

上传恶意文件时无意泄露两个0-day,被研究人员抓个正着

一个未知的黑客组织在向公开恶意软件扫描引擎上传一个用于攻击的 PDF 文件时,无意间泄露了两个 0-day 漏洞。漏洞被研究人员捕获,并及时上报给厂商修复。

10430
来自专栏BestSDK

互联网人必备:深刻理解什么是API接口

API(ApplicationProgrammingInterface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以...

34660
来自专栏Seebug漏洞平台

被忽视的攻击面:Python package 钓鱼

2017年6月2日,Paper 收录了一篇 fate0 的《Package 钓鱼》 文章,该文章讲述了作者在 PyPI 上投放恶意的 Python 包钓鱼的过...

438100
来自专栏张善友的专栏

Windows SharePoint Services 3.0 Service Pack 1

微软于2008年3月6日发布了Windows SharePoint Services 3.0 Service Pack 1,Windows SharePoint...

19590
来自专栏小詹同学

Python系列之——如何每天跟女朋友说晚安~

文章来源:http://www.cnblogs.com/botoo/p/8622379.html

20320

扫码关注云+社区

领取腾讯云代金券