问题描述:
如果点击某个应用或则某个键(如HOME)有震动发生,想取消话,则需要查看performHapticFeedbackLw函数,在PhoneWindowManager.java中
这个函数会调用系统的Vibrator 服务然后产生震动。有两种震动,长震动和短震动代码如下:
if (pattern.length == 1) {
// One-shot vibration
mVibrator.vibrate(owningUid, owningPackage, pattern[0]);
} else {
// Pattern vibration
mVibrator.vibrate(owningUid, owningPackage, pattern, -1);
}
如果想要按键产生震动的话可以调用此函数,如果不需要就删掉
也可以在Framework端写相应的接口,然后在setting里面设置,让用户来选择是否有震动。
关于这部分代码一般写在PhoneWindowManger的interceptKeyBeforeQueueing函数里面修改。
如果想添加音效的话,也可以在这里面修改(下面的代码是转载的,这里注明下):
按照如下方式修改
phonewindowmanager.java
interceptKeyBeforeDispatching(){
...
//添加如下code
if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){
Log.d(TAG,"interceptKeyBeforeDispatching KEYCODE_BACK,keyevent actiondown ");
AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
if (audioManager != null) {
audioManager.playSoundEffect(AudioManager.FX_KEY_CLICK);
} else {
Log.w(TAG, "Couldn't get audio manager");
}
}
if(keyCode == KeyEvent.KEYCODE_HOME && event.getAction()== KeyEvent.ACTION_DOWN){
Log.d(TAG,"interceptKeyBeforeDispatching KEYCODE_home,keyevent actiondown ");
AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
if (audioManager != null) {
audioManager.playSoundEffect(AudioManager.FX_KEY_CLICK);
} else {
Log.w(TAG, "Couldn't get audio manager");
}
}