ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2011年11月24日 星期四

Keyboard shortcut (Hotkey) in Android

Android 有 keyboard shortcut 功能,就是自己定義按著 Search 時,同時按下某個 key 就 啟動 XX app (可以自訂)。

但是要在有 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) 為例..,
  1. 送出一個 SEARCH KEY Down : 217, down
  2. 送出一個 b Key down, up : 48, down,up
  3. 這時候就可以看到 browser 已經被叫起來了
  4. 送出一個 SEARCH KEY Up : 217 up
keycode 定義可以看 ./include/linux/input.h
-- 新版 (3.0.X) 在 /include/uapi/linux/input.h



自己紀錄一下,就是:
  1. cd /sys/devices/platform/virkeyboard/
  2. echo D217 > vmevent
  3. echo 48 > vmevent -- 可以看到 browser 起來了
  4. echo U217 > vmevent

1 則留言:

Non-human 提到...

問一下前輩 :P
這個好像從 Android 3.0 開始就移掉了, 所以要這個功能的話要自己把code 加回去是嘛?

標籤

網誌存檔