커티(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) {
}
}
}
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) {
}
}
}
'프로그래밍 > 안드로이드' 카테고리의 다른 글
Android Full Source 부분빌드 (0) | 2011.07.06 |
---|---|
permission 종류 (0) | 2011.05.04 |
SD 카드를 다루기 위해 자바 표준 IO를 이용해보자 (0) | 2011.05.04 |
[펌]파일 입출력. (0) | 2011.05.04 |
[일부펌]소스 트리 Source Tree (0) | 2011.04.29 |