首页 > 代码库 > Android输入法扩展之远程输入法
Android输入法扩展之远程输入法
近年来,互联网电视开始火热,乐视TV,小米TV,最近爱奇艺也在大肆的招人做爱奇艺电视,当然还有更被关注的苹果电视。其实,这个趋势很正常,也很合理,传统单纯的接收电视节目的电视已经太传统了,是该被革命了。乐视为代表的新一代互联网电视采取互联网的营销方式,不需要实体店,不需要实体工厂,只需方案,服务,网上预约,直接快递等方式大大降低了成本,同时也可以控制库存,预防风险。同时他们都坚持硬件不赚钱,服务收费,更看重电视用户对象这一潜在价值。用户多了,干啥都方便,当然还有更大的智能家居大概念。
除了苹果电视,其他无一不是采用Android系统。但是各种互联网电视说到底它还是电视,不像手机,平板,PC等这些电子产品,用户离它是有距离的,用户是没法直接触摸屏幕等方式来输入的,因此Android软键盘方式实在是不够好的输入交互方式。对于英语系的国家,这个电视的输入还好解决,只需通过外接键盘直接输入,但是对于类似中文这种需要转换的语种来说,就麻烦了。这是因为Android外接键盘只能输入英文字符,同时输入法又没法获取外接键盘(只支持触摸软键盘的字符)的输入将其转化为中文。这就让我想到标题的“远程输入法”。
一个很通用的场景就是:电视安装了爱踢门的远程输入法,该输入法连接上了手机的远程输入端,然后用户在远程输入程序中用自身的输入法(搜狗输入法)输入,然后输入的内容就实时的传送到电视里的程序中了。
远程输入法机制
远程输入法的机制很简单:做一个特殊的输入法,该输入法不再通过触摸软键盘获得输入字符,而是通过网络直接从网络的另一端获取字符(这个字符可以是英文,也可以是中文,任意语系都可以),然后将这个字符发送给应用程序。输入的核心是两个:InputConnection的commitText和sendKeyEvent两个接口,如下代码实现:
private void sendText(String text) { if (!isShow()) { Log.d(TAG, "ime is hidden"); return; } final InputConnection ic = getCurrentInputConnection(); if(ic == null) { Log.d(TAG, "ic null"); return; } //将中文等任一语系文本发送给程序 ic.commitText(text, text.length()); } public void sendDownUpKeyEvents(int keyEventCode) { InputConnection ic = getCurrentInputConnection(); if (ic == null) return; long eventTime = SystemClock.uptimeMillis(); //发送delete,backspace删除字符等特殊输入,特殊输入是通过key来实现的哦 ic.sendKeyEvent(new KeyEvent(eventTime, eventTime, KeyEvent.ACTION_DOWN, keyEventCode, 0, 0, KeyCharacterMap.VIRTUAL_KEYBOARD, 0, KeyEvent.FLAG_SOFT_KEYBOARD|KeyEvent.FLAG_KEEP_TOUCH_MODE)); ic.sendKeyEvent(new KeyEvent(SystemClock.uptimeMillis(), eventTime, KeyEvent.ACTION_UP, keyEventCode, 0, 0, KeyCharacterMap.VIRTUAL_KEYBOARD, 0, KeyEvent.FLAG_SOFT_KEYBOARD|KeyEvent.FLAG_KEEP_TOUCH_MODE)); }
然后就是代码的大头,网络模块:实现局域网搜索服务,自动连接,网络数据发送。
远程输入法安装使用及源码
下面这个是我做的远程输入法的界面及使用界面
用户在两个手机上安装远程输入法程序,其中一个手机打开远程输入法应用,另外一个手机将输入法选择为RemoteIme,并点击里面的搜索按钮,当status变成connected,远程输入法应用就可为远程输入法输入内容了。
选择RemoteIme输入法配置过程:
1) 在setting里选择语言和输入法,然后选择RemoteIme
2) 然后点击默认,会弹出选择框,继续选择RemoteIme
3) 然后进入任一需要输入的程序,即可使用RemoteIme
如果大家想了解更多,可以在github找到我这个项目的源码:
https://github.com/itleaks/RemoteIme
如果只是测试,可以直接使用项中的RemoteIme.apk, 该源码只是初级版本,大家可以一起修改改进。
后记:
本博客将在后一篇接着讲述--------Android输入法扩展之外接键盘中文输入法