c和uinput,如何处理不同的语言

时间:2012-01-07 18:45:10

标签: android c linux

也许这是一个愚蠢的问题,但在我开始编写这部分软件之前,我正在寻找一些澄清。

我的应用程序允许用户在基于Android的客户端应用程序浏览器上书写。虽然我已经编写了所有必要的代码来处理这些内容,但我不知道如何处理手机上选择的不同语言。

我的意思是,在我的手机上制作一个COLON(:)我需要发送一个SHIFT(RIGHT SHIFT - > CODE 54)和一个DOT(。)(CODE 52),但这对于每种语言都是一样的?在启用了英语的Android手机上是否会一样?

1 个答案:

答案 0 :(得分:1)

您使用uinput界面发送的事件实质上是按键和发布,codes键代码,而不是字符。密钥代码是标准化的,实际的键盘驱动程序负责将低级硬件代码(也称为扫描代码)转换为正确的密钥代码。

因此,整个子系统与语言无关,国际字符集映射支持通常由用户空间(例如X服务器)或内核的上层(例如虚拟控制台子系统)提供。 / p>

由于您使用uinput生成自己的事件,因此您实际上是在模拟硬件键盘,因此您负责将实际输入的内容与正确的密钥代码进行匹配。

如果要从现有的实际或虚拟键盘中继事件,您有两种选择:

  • 找到一种方法,使用内核中正确的密钥代码接收原始事件。在一个完整的Linux发行版上,可以通过evdev接口完成。我不确定Android上是否提供该功能。

  • 找到一种从标准语言无关集接收密钥代码并将其转换为Linux密钥代码的方法。例如,X键代码也不受键盘映射的影响,与键盘符号相反。

  • 翻译您的应用程序正在接收的内容。现在这很棘手 - 您必须知道键盘映射,并且您可能也很难使用修改键(例如Shift),因为这些键可能并不总是传递给应用程序。