但是要在有 keyboard 的 機器 上那個設定畫面才會出現。
這個功能一樣做在 PhoneWindowManager.java 的 interceptKeyBeforeDispatching
在 HOME, MENU, CALL,, 等等 KEYCODE 的判斷後面...
// Shortcuts are invoked through Search+key, so intercept those here
if (mSearchKeyPressed) {
if (down && repeatCount == 0 && !keyguardOn) {
Intent shortcutIntent = mShortcutManager.getIntent(keyCode, metaState);
if (shortcutIntent != null) {
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(shortcutIntent);
/*
* We launched an app, so the up-event of the search key
* should be consumed
*/
mConsumeSearchKeyUp = true;
return true;
}
}
}
一樣用 startActivity( ) 叫起 app (intent),那個 對應哪個 key,都在ShorcutManager 的 database (bookmark) 中紀錄。Setting 部份的 source code 在
src/com/android/settings/ApplicationSettings.java
如果沒有 physical keyboard,就移除這個 Setting:
if (getResources().getConfiguration().keyboard == Configuration.KEYBOARD_NOKEYS) {
// No hard keyboard, remove the setting for quick launch
Preference quickLaunchSetting = findPreference(KEY_QUICK_LAUNCH);
getPreferenceScreen().removePreference(quickLaunchSetting);
}
實際設定的 class 是 quicklaunch
如果要作假...
以叫起 browser (S-B) 為例..,
- 送出一個 SEARCH KEY Down : 217, down
- 送出一個 b Key down, up : 48, down,up
- 這時候就可以看到 browser 已經被叫起來了
- 送出一個 SEARCH KEY Up : 217 up
-- 新版 (3.0.X) 在 /include/uapi/linux/input.h
自己紀錄一下,就是:
- cd /sys/devices/platform/virkeyboard/
- echo D217 > vmevent
- echo 48 > vmevent -- 可以看到 browser 起來了
- echo U217 > vmevent
1 則留言:
問一下前輩 :P
這個好像從 Android 3.0 開始就移掉了, 所以要這個功能的話要自己把code 加回去是嘛?
張貼留言