ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2011年11月17日 星期四

Keypad action in Android Framework

keyboard input (包含 home, power, menu, back..etc) 的動作是在 framework/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

public boolean interceptKeyBeforeDispatching(WindowState win, int action, int flags, int keyCode, int scanCode, int metaState, int repeatCount, int policyFlags) { 可以看到這個 function 根據狀況決定HOME key 要不要處理。
同時還處理 SEARCH , MENU。

所有的 keyevent,會先進到這裡,再到其他地方。

經過這個篩選後,key 會到 framwork/base/policy/src/com/android/internal/policy/impl/PhoneWindow.java
  1. protected boolean onKeyDown(int featureId, int keyCode, KeyEvent event)
  2. protected boolean onKeyUp(int featureId, int keyCode, KeyEvent event)
keydown 是主要作動作的地方,keyup 只是detect longpress 的 cancel。
像 KEYCODE_CAMERA 就會執行下面的code: sendCloseSystemWindows(); // Broadcast an intent that the Camera button was longpressed Intent intent = new Intent(Intent.ACTION_CAMERA_BUTTON, null); intent.putExtra(Intent.EXTRA_KEY_EVENT, event); getContext().sendOrderedBroadcast(intent, null); .. close current window & launch CAMERA app

在這裡處理的還有:
  1. KEYCODE_VOLUME_UP/DOWN
  2. KEYCODE_MEDIA_PLAY_PAUSE
  3. KEYCODE_MUTE:KEYCODE_HEADSETHOOK.KEYCODE_MEDIA_STOP:KEYCODE_MEDIA_NEXT:KEYCODE_MEDIA_PREVIOUS:KEYCODE_MEDIA_REWIND:KEYCODE_MEDIA_FAST_FORWARD:
  4. KEYCODE_MENU
  5. KEYCODE_BACK
  6. KEYCODE_CALL
  7. KEYCODE_SEARCH
所以有 自己新增的 button 要作到 HOT-KEY 功能的,都可以作到這裡。

沒有留言:

標籤

網誌存檔