커티(Qwerty) 자판이 달려있는 폰 개발을 하는 과정에서

Home key, EndCall Key, Back key, Sym key를 제한하게 되었다

1. key 이벤트를 사용하는 경우에는 아래의 메소드를 Override해서 사용해서 제한하면 되는데,
 Back key를 제한하기 위해서 사용하는 방법으로 onBackPressed()를 사용하거나 혹은
dispatchKeyEvent에서 사용을 제한하면 된다.

1).
@Override
public boolean dispatchKeyEvent(KeyEvent event)
{
    Log.d("ramses8", "dispatchKeyEvent");
    return super.dispatchKeyEvent(event);
}

2).
@Override
public void onBackPressed()
{

  super
.onBackPressed();

  Log.d(
"ramses8", "onBackPressed");
}
3).
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    Log.d("ramses8", "onKeyDown");
   
return super.onKeyDown(keyCode, event);
}

2. Home Key, Back Key의 경우에는

\frameworks\policies\base\phone\com\android\internal\policy\impl\PhoneWindowManager.java

클래스 내에 아래의 Method부분에서 수정을 해주면 된다.

public boolean interceptKeyTi(WindowState win, int code, int metaKeys, boolean down,
            int repeatCount, int flags)

public int interceptKeyTq(RawInputEvent event, boolean screenIsOn)


3. 커티자판이 있는 폰의 Sym key 키를 제한하는 경우에는
frameworks\base\core\java\android\view\inputmethod\InputMethodManager.java

아래의 showInputMethodPicker(); 부분이 실행되지 않도록 막아준다.

그리고 dispatchKeyEvent(KeyEvent event)를 @Override해서 내용에 실행하고자 하는 이벤트를 넣어준다.

나의 경우에는 현재 실행되고 있는 Activity가 내가 keyEvent 제한을 줄려고 하는 Activity와 동일한지 비교하여
사용을 제한하였다...Activity비교 코드는 생략....

/**
     * @hide
     */
    public void dispatchKeyEvent(Context context, int seq, KeyEvent key,
            IInputMethodCallback callback) {
        synchronized (mH) {
            if (DEBUG) Log.d(TAG, "dispatchKeyEvent");
   
            if (mCurMethod == null) {
                try {
                    callback.finishedEvent(seq, false);
                } catch (RemoteException e) {
                }
                return;
            }
   
            if (key.getAction() == KeyEvent.ACTION_DOWN
                    && key.getKeyCode() == KeyEvent.KEYCODE_SYM) {
                showInputMethodPicker();
                try {
                    callback.finishedEvent(seq, true);
                } catch (RemoteException e) {
                }
                return;
            }
            try {
                if (DEBUG) Log.v(TAG, "DISPATCH KEY: " + mCurMethod);
                mCurMethod.dispatchKeyEvent(seq, key, callback);
            } catch (RemoteException e) {
                Log.w(TAG, "IME died: " + mCurId + " dropping: " + key, e);
                try {
                    callback.finishedEvent(seq, false);
                } catch (RemoteException ex) {
                }
            }
        }
Posted by 컴투