2017-02-01 9 views
0

IME를 쓰고 있습니다. 예상대로 InputMethodService를 확장합니다. 에서 onCreate에서 임의의 유니 코드 문자로 Android KeyEvent를 만드는 방법은 무엇인가요?

는(), 내가 KeyCharacterMap을 취득하고 있습니다 :

keyCharacterMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD); 

나는 임의의 유니 코드 문자에 대한 가상 키 누름을 주입하는 방법이 필요합니다. 내 첫 자상는 다음과 같이보고 : 그것은 문자, 숫자, 일부 문장 부호 작동

public void generatePhantomKeypress(char[] c) { 
    KeyEvent[] keySequence = charMap.getEvents(c); 
    for (KeyEvent k : keySequence) 
     getCurrentInputConnection().sendKeyEvent(k); 
} 

을하지만, 단지 당신이 직접 입력 할 수있는 문자 (deadkey 체조없이 또는 고도의 키패드를 사용하여)에 대한 작동하는 것 같다 PC 키보드에서.

값이 다음 중 하나입니다 단일 요소와 문자 []을 통과 할 때 널 (null)을 반환 charMap.getEvents (...)를 일으킬 일부 특정 문자 :

  • 유로 기호 '€'(\ u20ac)
  • 스털링 기호 '£'(\ u00a3).
  • 또한 'E'(\ uc3a9)

TL/DR처럼 악센트 문자 초크 (값이 당신이 된 KeyEvent로 변환 어떻게 어떤 임의의 유니 코드 값 인 문자를 부여하거나 sendKeyEvent()에 전달 될 때 Android가 팬텀 키보드에서 직접 해당 문자를 입력 한 것처럼 작동하게하는 KeyEvent 객체의 시퀀스?

답변

1

일반적으로 IME는 키 이벤트를 생성하지 않습니다. 일반적으로 inputConnection.commit()을 사용하여 응용 프로그램에 데이터를 보냅니다. 이 API는 모든 CharSequence (제한된 스타일을 포함 할 수도 있음)를 사용합니다.

+0

예측을 사용하지 않는 경우 inputConnection.commit()을 사용할 수 있습니까? (저는 블루투스 마우스의 버튼을 사용하여 모스 (-ish) 코드를 입력하는 IME를 만듭니다) – Bitbang3r

+0

예. 입력 연결은 예측과 관련이 없습니다. 키보드에 연결된보기와 키보드 앱 사이의 통신 채널입니다. –

+0

감사합니다. 완벽하게 작동합니다! :-) – Bitbang3r