Android输入法扩展之远程输入法
近年来,互联网电视開始火热,乐视TV,小米TV,近期爱奇艺也在大肆的招人做爱奇艺电视。当然还有更被关注的苹果电视。事实上,这个趋势非常正常,也非常合理,传统单纯的接收电视节目的电视已经太传统了。是该被革命了。乐视为代表的新一代互联网电视採取互联网的营销方式,不须要实体店,不须要实体工厂,仅仅需方案,服务,网上预约,直接快递等方式大大减少了成本,同一时候也能够控制库存,预防风险。
同一时候他们都坚持硬件不赚钱,服务收费。更看重电视用户对象这一潜在价值。用户多了。干啥都方便,当然还有更大的智能家居大概念。
除了苹果电视,其它无一不是採用Android系统。可是各种互联网电视说究竟它还是电视。不像手机,平板,PC等这些电子产品,用户离它是有距离的。用户是没法直接触摸屏幕等方式来输入的。因此Android软键盘方式实在是不够好的输入交互方式。对于英语系的国家。这个电视的输入还好解决,仅仅需通过外接键盘直接输入,可是对于类似中文这样的须要转换的语种来说,就麻烦了。这是由于Android外接键盘仅仅能输入英文字符,同一时候输入法又没法获取外接键盘(仅仅支持触摸软键盘的字符)的输入将其转化为中文。这就让我想到标题的“远程输入法”。
一个非常通用的场景就是:电视安装了爱踢门的远程输入法,该输入法连接上了手机的远程输入端,然后用户在远程输入程序中用自身的输入法(搜狗输入法)输入,然后输入的内容就实时的传送到电视里的程序中了。
远程输入法机制
远程输入法的机制非常easy:做一个特殊的输入法,该输入法不再通过触摸软键盘获得输入字符,而是通过网络直接从网络的还有一端获取字符(这个字符能够是英文,也能够是中文。随意语系都能够),然后将这个字符发送给应用程序。输入的核心是两个: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));
}
然后就是代码的大头。网络模块:实现局域网搜索服务,自己主动连接,网络数据发送。
远程输入法安装使用及源代码
以下这个是我做的远程输入法的界面及使用界面
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSVRsZWFrcw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="600" height="500" alt="">
用户在两个手机上安装远程输入法程序。当中一个手机打开远程输入法应用。另外一个手机将输入法选择为RemoteIme,并点击里面的搜索button,当status变成connected,远程输入法应用就可为远程输入法输入内容了。
选择RemoteIme输入法配置过程:
1) 在setting里选择语言和输入法,然后选择RemoteIme
2) 然后点击默认,会弹出选择框,继续选择RemoteIme
3) 然后进入任一须要输入的程序。就可以使用RemoteIme
假设大家想了解很多其它,能够在github找到我这个项目的源代码:
https://github.com/itleaks/RemoteIme
假设仅仅是測试,能够直接使用项中的RemoteIme.apk, 该源代码仅仅是0基础版本号,大家能够一起改动改进。
后记:
本博客将在后一篇接着讲述--------Android输入法扩展之外接键盘中文输入法
/********************************
* 本文来自博客 “爱踢门”
* 转载请标明出处:http://blog.csdn.net/itleaks
******************************************/
Android输入法扩展之远程输入法的更多相关文章
- Android输入法扩展之外接键盘中文输入
大家想不想要这样一台Android Surface平板,看着就过瘾吧. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSVRsZWFrcw==/font/ ...
- 电视盒子好用又强大的跨屏远程输入法 TVRemoteIME
应用包下载地址: https://github.com/kingthy/TVRemoteIME/raw/master/released/IMEService-release.apk TVRemoteI ...
- 用Lua扩展谷歌拼音输入法
谷歌拼音输入法最后一次更新是2013年,最近2年毫无动静,这个产品应该已经停了,不过这并不影响对它的使用,我一直喜欢它的简洁和稳定. 说不上来什么原因,忽然想起了摆弄摆弄谷歌拼音输入法的扩展特性(我经 ...
- Android EditText 不弹出输入法
当第一次进入一个activity的时候 一般是第一个edittext是默认选中的,但是该死的软键盘也一起弹出来了 那是相当的不美观哈!(#‵′)凸.为此, 本大人就去寻找在刚进入这个activity ...
- Android EditText不弹出输入法焦点问题的总结
转自:http://mobile.51cto.com/aprogram-403138.htm 看一个manifest中Activity的配置,如果这个页面有EditText,并且我们想要进入这个页面的 ...
- Android EditText自动弹出输入法焦点
http://mobile.51cto.com/aprogram-403138.htm 1. 看一个manifest中Activity的配置,如果这个页面有EditText,并且我们想要进入这个页面的 ...
- Android 模拟MotionEvent事件 触发输入法
Android 模拟MotionEvent事件 触发输入法 android输入法layoutbutton文本编辑encoding 关键词:MotionEvent,模拟按键,模拟点击事件,主动弹出输 ...
- Android EditText不弹出输入法总结,焦点问题的总结
看一个manifest中Activity的配置,如果这个页面有EditText,并且我们想要进入这个页面的时候默认弹出输入法,可以这样设置这个属相:android:windowSoftInputMod ...
- 谷歌拼音输入法扩展API开发指南
为了帮助开发者在谷歌拼音输入法的基本输入功能基础上,开发和定义更丰富的扩展输入功能,谷歌拼音输入法提供了以Lua脚本编程语言为基础的输入法扩展API.利用输入法扩展API,开发者可以编写自定义的输入功 ...
随机推荐
- 如何防止js刷新页面后倒计时改变
1.存入cookie或localstorage(清除浏览器缓存后时间依然改变) 2.存入数据库
- 爬虫来啦!Day91
# 一.爬虫# 1.基本操作# 排名爬虫刷票# 抽屉网的所有发布新闻点赞# 自动化程序模拟用于的日常操作# 投票的机制是利用cookies,禁用cookies模式# 自定义的异步IO模块就是Socke ...
- tinymce原装插件源码分析(一)-hr
tinymce简介 tinymce是一款能方便无限扩展的网页富文本编辑器. tinymce原装插件已经十分丰富,对于文本编辑(blog等文章)是绰绰有余,但是应对一些复杂的应用,比如在上面开发html ...
- Laravel修炼:服务容器绑定与解析
前言 老实说,第一次老大让我看laravel框架手册的那天早上,我是很绝望的,因为真的没接触过,对我这种渣渣来说,laravel的入门门槛确实有点高了,但还是得硬着头皮看下去(虽然到现在我还有很多 ...
- Hadoop的datanode超时时间设置
datanode进程死亡或者网络故障造成datanode无法与namenode通信, namenode不会立即把该节点判定为死亡,要经过一段时间,这段时间暂称作超时时长. HDFS默认的超时时长为10 ...
- NYIST 46 最少乘法次数
最少乘法次数 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 给你一个非零整数,让你求这个数的n次方,每次相乘的结果可以在后面使用,求至少需要多少次乘.如24:2*2 ...
- ASP.NET-本地化、全球化
在<system.web>中加入一个全球化的标识,网站就可以自适应全球化了 也可以将出错信息全球化 上面的这种方式测试过对google浏览器好像没用,但是对IE内核的是可行的,可能goog ...
- java 自定义实现base64编码转换
1.base64编码转换 所谓base64编码,即按照规则把字符转化为"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456 ...
- github git.exe位置
C:\Users\yourname\AppData\Local\GitHub\PortableGit_69703d1db91577f4c666e767a6ca5ec50a48d243\bin\git. ...
- RvmTranslator7.1
RvmTranslator7.1 eryar@163.com RvmTranslator can translate the RVM file exported by AVEVA Plant(PDMS ...