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,开发者可以编写自定义的输入功 ...
随机推荐
- http状态码304
服务器对客户端返回HTTP/1.1 304 意思是服务端告诉客户端 我的的缓存没有改变你不需要来取了,就用你自己本地的吧! 浏览器的三种缓存协商机制: if-modified-since (基于最后 ...
- EFcore笔记之创建模型
排除属性:NotMapped NotMapped:排除属性在CodeFirst的时候在数据库里不创建该属性 public class Blog { public int BlogId { get; ...
- Converting Legacy Chrome IPC To Mojo
Converting Legacy Chrome IPC To Mojo Looking for Mojo Documentation? Contents Overview Deciding What ...
- Vue this.$router.push、replace、go的区别
1.this.$router.push 描述:跳转到不同的url,但这个方法会向history添加一个记录,点击后会返回到上一个页面 用法 //字符串 this.$router.push('home' ...
- Pytorch搭建简单神经网络 Task2
1>建立数据集(并绘制图像) # -*- coding: utf-8 -*- #demo.py import torch import torch.nn.functional as F # 主要 ...
- jsp页面跳转的路径问题
<form class="box login" action="/graduation_system/BServlet" method="pos ...
- linux进程管理之进程创建(三)
在linux系统中,许多进程在诞生之初都与其父进程共同用一个存储空间.但是子进程又可以建立自己的存储空间,并与父进程“分道扬镳”,成为与父进程一样真正意义上的进程. linux系统运行的第一个进程是在 ...
- POJ 2516 Minimum Cost (最小费用最大流)
POJ 2516 Minimum Cost 链接:http://poj.org/problem?id=2516 题意:有M个仓库.N个商人.K种物品.先输入N,M.K.然后输入N行K个数,每一行代表一 ...
- [javase学习笔记]-8.8 构造代码块
这一节我们再看一个特殊的代码块.那就是构造代码块. 这里我们简单的通过样例来说明一下: class Person { private String name; { System.out.println ...
- ASP.NET Identity 角色管理(Roles)
当我们使用ASP.NET 4.5创建模板项目时,会发现模板只提供了ApplicationUserManager用于用户的登录注册.修改.设置等,而没有提供与用户角色相关的代码,对此就需要我们自己手动的 ...