专栏首页美丽应用小折腾:修改蓝牙耳机按键映射

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

文章更新:

  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 条评论
登录 后参与评论

相关文章

  • 自改:(对编程友好的)百度手机输入法皮肤

    美丽应用
  • 在Volumio中使用命令行网易云音乐

    美丽应用
  • 安卓Chrome使用技巧合辑

    美丽应用
  • 【算法】254- 从头开始复习算法之让你彻底搞清楚BFS和DFS

    最近又有点学不进去了,不知道是不是天气热的缘故哈,没办法只好写一点算法来保持学习的路线不间断咯。 关于BFS和DFS,这是我们在面试的时候经常会遇到的两个...

    pingan8787
  • 我的微商考察之路(4/4):心路历程

    因工作变动的关系,有几个月的闲暇,考虑利用这段时间打造一个兼职项目,等新工作确定了就交给老婆打理。最适合的当然首选微商项目。于是利用大概半个月的...

    凌帅出口
  • Android开发环境的搭建

    前言: 作为一个Android开发的新手,光开发环境就差点搭建了一天,最后发现自己走了很多弯路,在此写出希望能够帮助想入门的朋友。先说一下,开发Android ...

    用户1215536
  • 简单明了的分类算法:OneR

    分类算法的目的就是根据训练集的特征将新的数据进行预测,当然能够找到特征之间的联系越多那么最后的分类结果也就应该越准确。但是有没有一个比较简单的算法,能够使用极少...

    Python疯子
  • 从苹果收购Beats看音乐智能硬件的几个方向

    32亿美元,苹果即将收购音乐耳机和流媒体订阅音乐服务商Beats。这是Apple有史以来的最大笔收购,与Google收购Nest同价,它带来的影响自然不会亚于...

    罗超频道
  • 剑指 Offer 03. 数组中重复的数字

    在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请...

    韩旭051
  • Range Sum Query - Immutable

    Given an integer array nums, find the sum of the elements between indices i and ...

    卡尔曼和玻尔兹曼谁曼

扫码关注云+社区

领取腾讯云代金券