Tôi đang lập trình trên một ứng dụng điều khiển từ xa. Một trong những nhiệm vụ là tiêm ký tự. Mã tôi hiện đang sử dụng trông giống như sau:Tiêm các ký tự không phải tiếng Anh trong Android
Instrumentation instr = new Instrumentation();
String str="a";
// basically the same like calling instr.sendStringSync(str);
char[] chars = str.toCharArray();
KeyCharacterMap keyCharacterMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD);
KeyEvent[] keyEvents = keyCharacterMap.getEvents(chars);
if (keyEvents != null) {
for (KeyEvent kev : keyEvents) {
instr.sendKeySync(kev);
}
}
Điều đó hoạt động hoàn hảo trên ký tự tiếng Anh (Các ký tự hiển thị trong hộp EditText). Tuy nhiên, nếu tôi đang cố gắng tiêm, ví dụ: Nhân vật Hàn Quốc, điều này không thành công. Hàm getEvents trả về null, ngay cả khi tôi đã cấu hình ngôn ngữ và bàn phím tiếng Hàn.
Tôi biết có một phương pháp khác để tiêm chuỗi trực tiếp:
KeyEvent event = new KeyEvent(SystemClock.uptimeMillis(), str, 0, 0);
instr.sendKeySync(event);
Đây không phải là làm việc một trong hai - không có ký tự thể hiện trong hộp EditText, và onKeyMultiple() không được gọi là một trong hai hoạt động thử nghiệm của tôi.
Đây là kỳ lạ kể từ khi dispatchKeyEvent() với cùng một sự kiện làm việc trong hoạt động thử nghiệm của tôi:
KeyEvent event = new KeyEvent(SystemClock.uptimeMillis(), str, 0, 0);
dispatchKeyEvent(event);
ứng dụng điều khiển từ xa của tôi cần phải tiêm các sự kiện không có vấn đề mà hoạt động. Điều này có thể sử dụng Thiết bị đo đạc (với android.permission.INJECT_EVENTS
và chữ ký có khóa nền tảng).
Tôi làm cách nào để chèn ký tự không phải tiếng Anh bằng cách sử dụng thiết bị đo đạc? Có cách nào khác để thực hiện việc này không? Ví dụ. Sử dụng dispatchKeyEvent (cũng phải làm việc cho các hoạt động/ứng dụng khác).
tôi đang gặp sự cố tương tự tại thời điểm này. Có ý kiến gì không? – Sprigg
giả sử rằng 'm_KeyCharacterMap' thực sự là' keyCharacterMap'? –
bạn đã đúng. Tôi đã sửa mã. – kahlk