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

1、序

Hi,你们好,我是承香墨影!java

智能电视或者智能盒子,不知道你们了解多少?android

这两年各大厂商生产的电视设备,基本上都是搭载的 Android 系统。既然电视自己就是 Android 系统的,咱们也能够在上面作一些颇有意思的小玩意。git

今天给你们推荐的就是一个能够经过手机控制智能电视的 App,固然,拿出来讲它确定是已经开源了。程序员

App 名称:TvRemoteIME

https://github.com/kingthy/TVRemoteIMEgithub

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

2、TvRemoteIME

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

想要体验又不想本身打包的同窗,能够在 Github 上下载最新版本 Apk 的安装包。服务器

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

TvRemoteIME 从名字就能够看出来,它实际上是把本身包装成一个输入法,使用它须要把本身设备的默认输入法设置成它。这样的设定其实有不少个好处,例如:输入法能拿到一些输入以及按键相关的权限,还有就是保活的问题,通常输入法的服务不会被系统轻易杀掉。学习

体验 TvRemoteIME

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

安装以后,你须要将它设置成系统的默认输入法,若是你的设备上有设置输入法的设置页面,固然是能够直接选择的。若是没有的话,你还能够经过 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 服务,均可以对其进行控制。

3、TvRemoteIME 的原理

TvRemoteIME 主要的几个功能:

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

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

3.1 通讯

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

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

https://github.com/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 来实现的,不过实际操做起来不是很稳定,有一些能够正常播放。

4、TvRemoteIME 的不足

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

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

依赖输入法

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

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

在没法和其余输入法兼容使用的状况下,吐槽一下 TvRemoteIME 输入法的 UI 有点丑。

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

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

4、小结

总体来讲 TvRemoteIME 还算是一个比较健全的项目,若是有兴趣学习研究,仍是能够看看源码的。

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

例如:

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

这两个 App,基本上知足个人平常须要。

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

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

推荐阅读:

相关文章
相关标签/搜索