Android仮想キータッチ呼び出しプロセス
2833 ワード
PhoneWindowManager.java
振動を使うところは他にもありますが、独自のperformHapticFeedback関数を持っています.例:
View.JAva(これはデスクトップ、アイコンを長く押すと振動します)
Android4.0上の仮想キーも、彼が呼び出した振動によって呼び出されます.KeyButtonViewを見ることができます.JAva、彼は引き継いだViewです.
これはセッションを通っているようです.JAvaはPhoneWindowManagerを呼び出したJAvaのperformHapticFeedbackLw()です.
public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags, boolean isScreenOn) {
if (down && (policyFlags & WindowManagerPolicy.FLAG_VIRTUAL) != 0
&& event.getRepeatCount() == 0) {
performHapticFeedbackLw(null, HapticFeedbackConstants.VIRTUAL_KEY, false);
}
public boolean performHapticFeedbackLw(WindowState win, int effectId, boolean always) {
Log.e("++++++++++++++++++++++", "++++++++++performHapticFeedbackLw PhoneWindowManager.java");
final boolean hapticsDisabled = Settings.System.getInt(mContext.getContentResolver(),
Settings.System.HAPTIC_FEEDBACK_ENABLED, 0) == 0;
if (!always && (hapticsDisabled || mKeyguardMediator.isShowingAndNotHidden())) {
return false;
}
long[] pattern = null;
switch (effectId) {
case HapticFeedbackConstants.LONG_PRESS:
pattern = mLongPressVibePattern;
break;
case HapticFeedbackConstants.VIRTUAL_KEY:
pattern = mVirtualKeyVibePattern;
break;
case HapticFeedbackConstants.KEYBOARD_TAP:
pattern = mKeyboardTapVibePattern;
break;
case HapticFeedbackConstants.SAFE_MODE_DISABLED:
pattern = mSafeModeDisabledVibePattern;
break;
case HapticFeedbackConstants.SAFE_MODE_ENABLED:
pattern = mSafeModeEnabledVibePattern;
break;
default:
return false;
}
if (pattern.length == 1) {
// One-shot vibration
mVibrator.vibrate(pattern[0]);
} else {
// Pattern vibration
mVibrator.vibrate(pattern, -1);
}
return true;
}
振動を使うところは他にもありますが、独自のperformHapticFeedback関数を持っています.例:
View.JAva(これはデスクトップ、アイコンを長く押すと振動します)
public boolean performHapticFeedback(int feedbackConstant, int flags) {
if (mAttachInfo == null) {
return false;
}
//noinspection SimplifiableIfStatement
if ((flags & HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING) == 0
&& !isHapticFeedbackEnabled()) {
return false;
}
return mAttachInfo.mRootCallbacks.performHapticFeedback(feedbackConstant,
(flags & HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING) != 0);
}
Android4.0上の仮想キーも、彼が呼び出した振動によって呼び出されます.KeyButtonViewを見ることができます.JAva、彼は引き継いだViewです.
これはセッションを通っているようです.JAvaはPhoneWindowManagerを呼び出したJAvaのperformHapticFeedbackLw()です.