阅读更多
[DESCRIPTION]
Setting->情景模式->使能振动选项,TP虚拟按键无振动效果
[SOLUTION]
修改tp driver中对于虚拟按键在normal mode下的上报方式为坐标上报,如果直接在TP driver中去上报key, android framework不会走振动的流程,此时如果想要实现虚拟按键振动,可以修改PhoneWindowManager.java 中 interceptKeyBeforeQueueing方法里添加 if (down && ((keyCode == KeyEvent.KEYCODE_HOME)||(keyCode == KeyEvent.KEYCODE_MENU)||(keyCode == KeyEvent.KEYCODE_BACK))){
performHapticFeedbackLw(null, HapticFeedbackConstants.VIRTUAL_KEY, false);
} 处理。
对于虚拟按键,只要以坐标形式上报并且在tpd_custom_xxx.h中配置好虚拟按键的坐标范围,Android framework会自动进行振动处理。
在TouchPanel的driver中,如果虚拟按键是以 input_report_key(tpd->kpd, key_code, key_val);方式上报key值,是不会有触感的。
如果虚拟按键是以坐标形式上报,如下所示:
input_report_abs(tpd->dev, ABS_MT_POSITION_X, x);
input_report_abs(tpd->dev, ABS_MT_POSITION_Y, y);
上报的,就会有触感。
把虚拟按键以坐标的形式上报。
1,TPD_HAVE_BUTTON宏要打开:#define TPD_HAVE_BUTTON
2,定义按键的坐标位置(具体定义,可以参考 FAQ03862 --电容屏客制化文件vitual key的配置)
#define TPD_BUTTON_HEIGH 100
#define TPD_KEY_COUNT 3
#define TPD_KEYS { KEY_MENU, KEY_HOME,KEY_BACK}
#define TPD_KEYS_DIM {{80,850,160,TPD_BUTTON_HEIGH},{240,850,160,TPD_BUTTON_HEIGH},{400,850,160,TPD_BUTTON_HEIGH}}
3, 从TouchPanel中读到的虚拟按键数据有两种,一种是key值(1,2,3),另一种是报的坐标值((x,y));
如果读出的虚拟按键值为坐标,那直接按TouchPanel报坐标点的方式上报就OK了。
如果是key值,那就需要把key人为的转为坐标,然后在上报。