- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
android 耳机
Android 耳机系统综述
本文为本人随笔所写,欢迎转载。由于个人的见识和能力有限,不能面面俱到,也可能存在
谬误,敬请各位指出,本人的邮箱是hyouyan@126.com,博客是
在 Android 中其实并没有耳机系统这个称呼,只是我为了方便解释而加的。在整个
android 系统中,跟耳机相关的部分有:
Linux 驱动:主要完成耳机的插入的检测,hook 键的检测,其中hook 键包括长按
和短按。
在frameworks 中的耳机的观察的文件(HeadsetObserver.java ),这个文件主要是检
测耳机是否插入和名字,并把相关的内容通过Intent 广播出去。
跟音频相关,改变音频输出的路径(这边涉及到播放音乐和电话部分)。
跟事件的处理相关,这部分主要体现hook 的功能,主要是接听电话,挂断电话等。
事件的处理又分为linux 的事件处理和android 上的事件处理。
我将分块叙述,由于各种原因,我在这不便把源代码公布,如果你需要的我的帮助,可
以发邮件给我,也可以在我blog 上留言,谢谢!
Linux驱动
首先要定义一个 switch_dev (struct switch_dev sdev; )并把它初始化,如(
= ……);然后注册一个switch device:
ret = switch_dev_register(switch_data-sdev);
if (ret 0)
{
goto err_switch_dev_register;
}
switch_dev_register 这个函数在switch_class.c 中实现
int switch_dev_register(struct switch_dev *sdev)
{
int ret;
if (!switch_class) {
ret = create_switch_class();
if (ret 0)
return ret;
}
sdev-index = atomic_inc_return(device_count);
sdev-dev = device_create(switch_class, NULL,
MKDEV(0, sdev-index), NULL, sdev-name);
if (IS_ERR(sdev-dev))
return PTR_ERR(sdev-dev);
ret = device_create_file(sdev-dev, dev_attr_state);
if (ret 0)
goto err_create_file_1;
ret = device_create_file(sdev-dev, dev_attr_name);
if (ret 0)
goto err_create_file_2;
dev_set_drvdata(sdev-dev, sdev);
sdev-state = 0;
return 0;
err_create_file_2:
device_remove_file(sdev-dev, dev_attr_state);
err_create_file_1:
device_destroy(switch_class, MKDEV(0, sdev-index));
printk(KERN
文档评论(0)