近年来,互联网电视開始火热,乐视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输入法扩展之远程输入法的更多相关文章

  1. Android输入法扩展之外接键盘中文输入

    大家想不想要这样一台Android  Surface平板,看着就过瘾吧. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSVRsZWFrcw==/font/ ...

  2. 电视盒子好用又强大的跨屏远程输入法 TVRemoteIME

    应用包下载地址: https://github.com/kingthy/TVRemoteIME/raw/master/released/IMEService-release.apk TVRemoteI ...

  3. 用Lua扩展谷歌拼音输入法

    谷歌拼音输入法最后一次更新是2013年,最近2年毫无动静,这个产品应该已经停了,不过这并不影响对它的使用,我一直喜欢它的简洁和稳定. 说不上来什么原因,忽然想起了摆弄摆弄谷歌拼音输入法的扩展特性(我经 ...

  4. Android EditText 不弹出输入法

    当第一次进入一个activity的时候  一般是第一个edittext是默认选中的,但是该死的软键盘也一起弹出来了 那是相当的不美观哈!(#‵′)凸.为此, 本大人就去寻找在刚进入这个activity ...

  5. Android EditText不弹出输入法焦点问题的总结

    转自:http://mobile.51cto.com/aprogram-403138.htm 看一个manifest中Activity的配置,如果这个页面有EditText,并且我们想要进入这个页面的 ...

  6. Android EditText自动弹出输入法焦点

    http://mobile.51cto.com/aprogram-403138.htm 1. 看一个manifest中Activity的配置,如果这个页面有EditText,并且我们想要进入这个页面的 ...

  7. Android 模拟MotionEvent事件 触发输入法

    Android 模拟MotionEvent事件 触发输入法   android输入法layoutbutton文本编辑encoding 关键词:MotionEvent,模拟按键,模拟点击事件,主动弹出输 ...

  8. Android EditText不弹出输入法总结,焦点问题的总结

    看一个manifest中Activity的配置,如果这个页面有EditText,并且我们想要进入这个页面的时候默认弹出输入法,可以这样设置这个属相:android:windowSoftInputMod ...

  9. 谷歌拼音输入法扩展API开发指南

    为了帮助开发者在谷歌拼音输入法的基本输入功能基础上,开发和定义更丰富的扩展输入功能,谷歌拼音输入法提供了以Lua脚本编程语言为基础的输入法扩展API.利用输入法扩展API,开发者可以编写自定义的输入功 ...

随机推荐

  1. linux上使用chrome自动化测试(无界面)

    selenium自动化测试主要是用于有图形界面的系统上,对于无图形界面的情况可以通过以下方法来实现 服务器信息 [root@spider01 ~]# hostnamectl Static hostna ...

  2. (三)React基础

    3-1 使用React编写TodoList功能 import { Fragment} from ‘react’ Fragment是占位符 用于替代最外层div元素, 防止生成的元素会有两层div嵌套这 ...

  3. (2016北京集训十四)【xsy1556】股神小D - LCT

    题解: 题解居然是LCT……受教了 把所有区间按照端点排序,动态维护目前有重叠的区间,用LCT维护即可. 代码: #include<algorithm> #include<iostr ...

  4. 通过唯一ID实现简单的日志跟踪实现

    在实际项目中,通知我们需要记录一些日志,方便问题核查.但是日志多了就很容易混乱,请求,响应,执行中的日志无法对应,这时就需要为请求进行标记唯一ID来进行跟踪. /** * 记录请求日志 * * Cla ...

  5. 紫书 习题 8-21 UVa 1621 (问题分析方法)

    知道是构造法但是想了挺久没有什么思路. 然后去找博客竟然只有一篇!!https://blog.csdn.net/no_name233/article/details/51909300 然后博客里面又说 ...

  6. idea 包的显示方式

    idea 可以通过点击Project的导航栏里的小齿轮里面有一个 Flatten packages 选项,将其勾上.就可以得到跟eclipse一样的包的显示方式. 没有设置默认是这样的 2018-06 ...

  7. Tomcat连HBase报错: HTTP Status 500 - java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext

    Tomcat中连接HBase数据库,启动的时候报错: HTTP Status 500 - java.lang.AbstractMethodError: javax.servlet.jsp.JspFac ...

  8. zjnu(1181)——石子合并

    这道题算是最简单的区间dp了..非常久之前写的,搞懂原理了就1A. 传送门:problem_id=1181">http://acm.zjnu.edu.cn/CLanguage/show ...

  9. SparkSQL基础

    * SparkSQL基础 起源: 1.在三四年前,Hive可以说是SQL on Hadoop的唯一选择,负责将SQL编译成可扩展的MapReduce作业.鉴于Hive的性能以及与Spark的兼容,Sh ...

  10. Error creating bean with name 'testController': Injection of resource dependencies failed;

    启动ssm项目报错: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 't ...