一、序

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. 重定向stdin stdout stderr |

    在Linux下,当一个用户进程被创建的时候,系统会自动为该进程创建三个数据 流,也就是题目中所提到的这三个.那么什么是数据流呢(stream)? 我们知道,一个程序要运行,需要有输入.输出,如果出错, ...

  2. JAVA设计模式---单例模式的几种实现方式比较

    1.延迟实例化方式:(懒汉模式) public class Singleton { private static Singleton uniqueInstance; private Singleton ...

  3. Spring学习之二

    1.初始化和销毁Bean 当实例化一个Bean时,可能需要执行一些初始化操作来确保该Bean处于可用状态.同样地,当不需要Bean时,将其从容器中移除时,我们可能还需要按顺序的执行一些清除工作. 为定 ...

  4. java之Servlet监听器Listener

    常用应用场景:单点登录.统计在线人数 一.简介 (一)概述 1.Listener 用于监听 java web程序中的事件,例如创建.修改.删除Session.request.context等,并触发响 ...

  5. ansible playbook实践(三)-yaml文件写法

    playbook基于YAML语法来编写,基本语法规则如下: 1.大小写敏感 2.使用缩进表示层级关系 3.缩进时不允许使用Tab键,只允许使用空格 4.缩进的空格数目不重要,只要相同层级的元素左侧对齐 ...

  6. BZOJ 1299: [LLH邀请赛]巧克力棒 [组合游戏]

    每次一人可以从盒子里取出若干条巧克力棒,或是将一根取出的巧克力棒吃掉正整数长度. Nim游戏多了一个决策:拿出一些石堆 显然只要给对方构造异或和为0的子集就行了 暴枚子集... #include &l ...

  7. BZOJ 4408: [Fjoi 2016]神秘数 [主席树]

    传送门 题意: 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13},8无法表示为集合S的子集的和,故集合S的神秘数为8.现给定n个正整数a[1]. ...

  8. BZOJ 1004: [HNOI2008]Cards [Polya 生成函数DP]

    传送门 题意:三种颜色,规定使用每种颜色次数$r,g,b$,给出一个置换群,求多少种不等价着色 $m \le 60,\ r,g,b \le 20$ 咦,规定次数? <组合数学>上不是有生成 ...

  9. BZOJ 1176: [Balkan2007]Mokia [CDQ分治]

    题意: 有一个n * n的棋盘,每个格子内有一个数,初始的时候全部为0.现在要求维护两种操作: 1)Add:将格子(x, y)内的数加上A. 2)Query:询问矩阵(x0, y0, x1, y1)内 ...

  10. XSD详解一 - 基本概念

    本分类下的文章主要是对W3School的文档进行整理:http://www.w3school.com.cn/x.asp XML Schema 是基于 XML 的 DTD 替代者. XML Schema ...