一、序

Hi,大家好,我是承香墨影!

智能电视或者智能盒子,不知道大家了解多少?

这两年各大厂商生产的电视设备,基本上都是搭载的 Android 系统。既然电视本身就是 Android 系统的,我们也可以在上面做一些很有意思的小玩意。

今天给大家推荐的就是一个可以通过手机控制智能电视的 App,当然,拿出来说它肯定是已经开源了。

App 名称:TvRemoteIME

https://github.com/kingthy/TVRemoteIME

虽然针对智能电视,市面上已经有很多免费的商业应用,例如:悟空遥控器、快点投屏等,这些已经非常好用了,但是开源的项目依然值得我们借鉴和研究。

二、TvRemoteIME

TvRemoteIME 本身除了基本的控制之外,还包含了一些例如:App 的安装和运行、视频播放、文件系统浏览和下载等功能。

想要体验又不想自己打包的同学,可以在 Github 上下载最新版本 Apk 的安装包。

https://github.com/kingthy/TVRemoteIME/raw/master/released/IMEService-release.apk

TvRemoteIME 从名字就可以看出来,它其实是把自己包装成一个输入法,使用它需要把自己设备的默认输入法设置成它。这样的设定其实有很多个好处,例如:输入法能拿到一些输入以及按键相关的权限,还有就是保活的问题,一般输入法的服务不会被系统轻易杀掉。

体验 TvRemoteIME

想要体验的同学可以通过上面提供的下载地址下载,得到 Apk 之后,再安装到待控制的设备上,这里可以是一个智能电视、智能盒子或者一台普通的 Android 手机。

安装之后,你需要将它设置成系统的默认输入法,如果你的设备上有设置输入法的设置页面,当然是可以直接选择的。如果没有的话,你还可以通过 adb 命令来进行设置。

adb shell ime set com.android.tvremoteime/.IMEService

一切设置妥当之后,就可以通过电脑或者手机,远程访问控制页面。控制页面是一个网页,地址就是你安装 TvRemoteIME 的设备的 IP 地址,端口是固定的 9978

例如我当前的设备的 IP 是 192.168.1.199,那就是 http://192.168.1.199:9978/

之后你就可以在浏览器中,看到前面截图的控制页面,开始你的体验吧。

这样通过一个 Http 服务器来提供操作的各种 UI,与待控制的设备上的 TvRemoteIME 输入法程序进行通信,再由 TvRemoteIME 去执行具体的操作逻辑。这样的方式其实很好,全程只需要在待操作的设备上安装一个 App,然后多端(Android、iOS、Web)通过 Http 服务,都可以对其进行控制。

三、TvRemoteIME 的原理

TvRemoteIME 主要的几个功能:

  1. 按键控制
  2. 文件浏览(安装、目录、打开)
  3. 视频播放

接下来分析它主要的几个功能。

3.1 通信

首先要确定一点,TvRemoteIME 只有一个输入法,而要控制它其实是去访问 TvRemoteIME 提供的一个本地 Http 服务。

从文档和代码中可以看到,这个服务是基于 NanoHTTPD 这个开源项目的。它是一个简单的 HTTP 服务器,简单到只需要一个文件就可以提供完整的 Http 服务,可以说非常的好用。

https://github.com/NanoHttpd/nanohttpd

TvRemoteIME 的所有通信操作,都是基于 NanoHTTPD 的,例如:提供操作页面、通信、上传下载文件等等。它可以算是 TvRemoteIME 的基础。

3.2 控制

前面也提到了,TvRemoteIME 将自己包装成一个输入法,所以很多操作它都可以通过 InputConnection 来实现,例如按键的控制。

关于控制,你可以在 IMEService 里看到对应的逻辑。

long eventTime = SystemClock.uptimeMillis();
InputConnection ic = getCurrentInputConnection();
switch (keyAction) {
case KEY_ACTION_PRESSED:
sendKeyCode(kc);
break;
case KEY_ACTION_DOWN:
if(ic != null) {
ic.sendKeyEvent(new KeyEvent(eventTime, eventTime,
KeyEvent.ACTION_DOWN, kc, 0, 0, KeyCharacterMap.VIRTUAL_KEYBOARD, 0,
KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE));
}
break;
case KEY_ACTION_UP:
if(ic != null) {
ic.sendKeyEvent(new KeyEvent(eventTime, eventTime,
KeyEvent.ACTION_UP, kc, 0, 0, KeyCharacterMap.VIRTUAL_KEYBOARD, 0,
KeyEvent.FLAG_SOFT_KEYBOARD | KeyEvent.FLAG_KEEP_TOUCH_MODE));
}
break;
}

3.3 视频播放

视频播放功能的播放器,也是基于另外一个开源项目 AFAP Player ,内部采用的 ijkPlayer 来实现。

通过 NanoHTTPD 传递过来的播放地址,然后直接传递给播放器去播放即可。

看文档唯一让我觉得有亮点的地方说是可以支持 thunder/ed2k 协议的视频,也是基于另外一个开源项目 MiniThunder 来实现的,不过实际操作起来不是很稳定,有一些可以正常播放。

四、TvRemoteIME 的不足

TvRemoteIME 其实作为一个研究项目,已经算是可以了,并且只需要一个输入法 App,简单设置一下,并不需要再在手机上安装其他 App,这样 Android 和 iOS 都可以通用。

但是我这里算是鸡蛋里挑骨头,说一下它的不足。

依赖输入法

核心功能严重依赖输入法,例如:按键控制、输入、保活等等。

输入法本身这个思路是挺好的,这样可以让我们少思考很多问题。但是在现阶段我了解的情况,很多传统厂商生产的智能电视,其实是无法设置输入法的,这样基本上切断了使用的唯一途径。甚至安装第三方 App 就已经是很难了,哪怕安装上,你也无法将它设置为系统输入法。

在无法和其他输入法兼容使用的情况下,吐槽一下 TvRemoteIME 输入法的 UI 有点丑。

除了依赖输入法服务之外,其他的思路基本上是正确的,也没什么好挑剔的地方。

最近,作者又更新的 TvRemoteIME,现在可以不依赖输入法就可以使用,但是不设置输入法,无法使用控制相关的功能。这样其实对整个 App 的功能来说是致命的,后期还需要考虑如何做到保活和控制的问题。

四、小结

整体来说 TvRemoteIME 还算是一个比较健全的项目,如果有兴趣学习研究,还是可以看看源码的。

不过日常使用的话,还是推荐一些免费的商业 App。

例如:

  • 悟空遥控器:无需输入法,全线控制,App 管理、视频内容也很全面。
  • 快点投屏:无需TV端,基于 AirPlay 和 DLNA 实现手机控制电视直接播放。

这两个 App,基本上满足我的日常需要。

你对 Android 智能电视有什么看法?不妨在留言区讨论。

今天在公众号后台回复成长『成长』,将会得到我整理的一些学习资料,也能回复『加群』,一起学习进步。

推荐阅读:

远程控制你的智能电视,按键|输入|安装App等都已实现,已开源!的更多相关文章

  1. 检验appium环境是否正常:使用appium自动给手机安装app(注意:如果已存在该app,再执行会将原来的卸载再重装,需谨慎)

    (注意:如果已存在该app,再执行会将原来的卸载再重装.泪的教训,我的微信被卸载重装了o(╥﹏╥)o,自动安装app这个步骤需谨慎操作) hi,前面几篇已经讲了appium环境的搭建.设备的连接, 那 ...

  2. 安卓Tv开发(二)移动智能电视之焦点控制(按键事件)

    原文:http://blog.csdn.net/sk719887916/article/details/44781475 skay 前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家 ...

  3. 智能电视软件安装(WIFI上网)

    智能电视软件上网(电视可连接无线网的称之为:智能电视) 1.安装当贝市场 链接:http://www.dangbei.com/ 2.安装电视家浏览器 链接:http://www.tvapk.net/f ...

  4. 【开源项目】智能电视及电视盒子的控制应用TVRemoteIME的接口说明

    一.APP项目介绍: APP名称:TVRemoteIME 功能说明:安卓智能电视或者安卓盒子的控制应用,可跨屏远程输入.远程遥控(代替遥控器)盒子.盒子应用及文件管理.HTTP/RTMP/MMS网络视 ...

  5. linux输入子系统(input subsystem)之按键输入和LED控制

    实验现象:在控制台打印按键值,并且通过按键控制相应的LED亮灭. 1.代码 input_subsys_drv.c #include <linux/module.h> #include &l ...

  6. 安卓Tv开发(一)移动智能电视之焦点控制(触控事件)

    前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家居,以及可穿戴设备的大量使用,但是这些设备上的开发并不是和传统手机开发一样,特别是焦点控制和用户操作体验风格上有很大的区别,本系列博 ...

  7. 安卓TV开发(概述) 智能电视之视觉设计和体验分析

         转载说明出处 :http://blog.csdn.net/sk719887916, 作者:skay 前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家居,以及可穿戴设备的大 ...

  8. AIROBOT系统 之 私人存储 和 DLNA 智能电视云

    需求背景 工作多年之后发现有太多的电子资料到处存放.个人电脑是Mac,硬盘都不大,放不了太多东西.并且有时候想随时随地存放一些东西.所有就有了大家一个私有存储的需求 个人休息在家经常喜欢看电影电视剧, ...

  9. [Python爬虫] 之二十六:Selenium +phantomjs 利用 pyquery抓取智能电视网站图片信息

    一.介绍 本例子用Selenium +phantomjs爬取智能电视网站(http://www.tvhome.com/news/)的资讯信息,输入给定关键字抓取图片信息. 给定关键字:数字:融合:电视 ...

随机推荐

  1. Android 使用android-support-multidex解决Dex超出方法数的限制问题

    随着应用不断迭代,业务线的扩展,应用越来越大(比如集成了各种第三方sdk或者公共支持的jar包,项目耦合性高,重复作用的类越来越多),相信很多人都遇到过如下的错误: UNEXPECTED TOP-LE ...

  2. Java 生产者消费者模式详细分析

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  3. ajax请求获取实时数据

    <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  4. Ready!Api创建使用DataSource和DataSourceLoop的循环测试用例

    step one:在testSuite(假如没有,新建一个)下新建一个testcase,并新建一个DataSource(注意:创建数据源时,一定要把request中所有的传参字段都放到数据源字段中&l ...

  5. Lucene.net(4.8.0) 学习问题记录五: JIEba分词和Lucene的结合,以及对分词器的思考

    前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...

  6. ABP官方文档翻译 6.6 Javascript API

    JavaScript API AJAX 通知 消息 UI Block和Busy 事件总线 日志 其他实用功能 ABP提供了一套对象和函数,用来简化.标准化javascript的开发. 这里是ABP提供 ...

  7. 济南清北学堂游记 Day 1.

    快住手!这根本不是暴力! 刷了一整天的题就是了..上午三道题的画风还算挺正常,估计是第一天,给点水题做做算了.. rqy大佬AK了上午的比赛! 当时我t2暴力写挂,还以为需要用啥奇怪的算法,后来发现, ...

  8. bzoj 3451: Tyvj1953 Normal [fft 点分治 期望]

    3451: Tyvj1953 Normal 题意: N 个点的树,点分治时等概率地随机选点,代价为当前连通块的顶点数量,求代价的期望值 百年难遇的点分治一遍AC!!! 今天又去翻了一下<具体数学 ...

  9. BZOJ 3698: XWW的难题 [有源汇上下界最大流]

    3698: XWW的难题 题意:(1)A[N][N]=0:(2)矩阵中每行的最后一个元素等于该行前N-1个数的和:(3)矩阵中每列的最后一个元素等于该列前N-1个数的和.给A中的数进行取整操作(可以是 ...

  10. BZOJ 1069: [SCOI2007]最大土地面积 [旋转卡壳]

    1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 2978  Solved: 1173[Submit][Sta ...