此问题涉及两方面,应用层的修改和对应的驱动修改。
应用层修改:
应用层主要是要添加媒体按键监听并对相关按键做响应处理。长按耳机键对应的按键是:KEYCODE_MEDIA_STOP
}else if (KeyEvent.KEYCODE_MEDIA_STOP == event.getKeyCode() && event.getAction() == KeyEvent.ACTION_UP) {
if (mIsPlaying) {
refreshImageButton(false);
refreshActionMenuItem(false);
refreshPopupMenuItem(false);
refreshActionMenuPower(false);
exitService();
}
}
驱动层修改:
当物理层有按键的时候会调用accdet.c文件中的check_cable_type方法,在此方法内对各按键做了相关处理。
长按事件:
case LONG_MD:
if(call_status == 0){
notify_sendKeyEvent(ACC_MEDIA_STOP);
}else{
notify_sendKeyEvent(ACC_END_CALL);
}
break;
然后会调用sendKeyEvent()方法。
if(ACC_MEDIA_STOP== accdet_key_event) {
input_report_key(kpd_accdet_dev, KEY_STOPCD, 1);
input_report_key(kpd_accdet_dev, KEY_STOPCD, 0);
input_sync(kpd_accdet_dev);
}
另外此问题还有一个中间衔接的地方就是键值的对应关系。应用层的MEDIA_STOP的键值是86.驱动层的KEY_STOPCD的键值是166。两者的对应关系表格在ACCDET.kl,如果没有可以自行添加。有的时候平台也会把键值关系表客制化到其他文件中,如:mtk-kpd.kl。最终生效的是客制化的文件。键值对应关系:
key 166 MEDIA_STOP WAKE