Мне нужно вставить в приложение для Android специальный символ, который не включен ни в один из существующих файлов KeyCharacterMap. Генерация ключевых событий - единственный способ получить какой-либо активный контроль, не зная, какой именно.
Чтобы загрузить эту карту, чтобы сгенерировать KeyEvent из, я должен указать идентификатор карты, но этот идентификатор поступает из InputDevice, а для моего вновь созданного файла kcm такого устройства нет.
Как лучше всего использовать эту раскладку без существующего устройства ввода или подделать устройство ввода?
Я считаю, что с помощью этого решения вы можете сгенерировать специальный ключ:
char[] szRes = szStringText.toCharArray(); // Convert String to Char arra
KeyCharacterMap CharMap;
if (Build.VERSION.SDK_INT >= 11) // My soft runs until API 5
CharMap = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD);
else
CharMap = KeyCharacterMap.load(KeyCharacterMap.ALPHA);
KeyEvent[] events = CharMap.getEvents(szRes);
for(int i=0; i<events.length; i++)
MainWebView.dispatchKeyEvent(events[i]); // MainWebView is webview
Вы можете построить строку [] szStringText с помощью "! / §)". Обычно код преобразует символ. Источник: https://www.codota.com/code/java/classes/android.view.KeyCharacterMap
Я так и сделал, но нужные мне символы не являются частью карт, поэтому getEvents не вернет никакого результата. Мне пришлось использовать локальную раскладку клавиатуры с региональными символами. Мне нужен способ вставки символов без загрузки специальной раскладки клавиатуры.