基于ADB Shell 实现的 Android TV、电视盒子万能遥控器 — ADB Remote ATV
ADB Remote ATV
Android TV 的遥控器,基于 ADB Shell 命令
ADB Remote ATV 是一个 Android TV 的遥控器,基于 ADB Shell 命令,泛用性更高。
下面的 shell 命令,是软件的基本原理,通过 shell 命令可模拟物理遥控器的基本按键,此外还可以快捷启动指定APP、借助手机软键盘输入中/英字符等。
# 输入事件
adb shell input text <string> # 向设备输入字符
adb shell input keyevent <key_code> # 向设备输入按键事件
# 启动软件
adb shell am start <package/activity> # 启动设备上的软件
shell ime set <app> # 切换输入法
shell settings get secure default_input_method # 获取当前输入法
软件功能
按键
对于的 shell 命令如下:
adb shell input keyevent <key_code> # 向设备输入按键事件
其中的 keycode如下表:
| 功能 | 字符常量 | 数字键值 |
|---|---|---|
| 返回键 | KEYCODE_BACK | 4 |
| 按键Home | KEYCODE_HOME | 3 |
| 菜单键 | KEYCODE_MENU | 82 |
| 扬声器静音键 | KEYCODE_VOLUME_MUTE | 164 |
| 音量增加键 | KEYCODE_VOLUME_UP | 24 |
| 音量减小键 | KEYCODE_VOLUME_DOWN | 25 |
| 导航键 向上 | KEYCODE_DPAD_UP | 19 |
| 导航键 向下 | KEYCODE_DPAD_DOWN | 20 |
| 导航键 向左 | KEYCODE_DPAD_LEFT | 21 |
| 导航键 向右 | KEYCODE_DPAD_RIGHT | 22 |
| 导航键 确定键 | KEYCODE_DPAD_CENTER | 23 |
| 数字按键 | KEYCODE_0 - KEYCODE_9 | 7 - 16 |
| 退格键 | KEYCODE_DEL | 67 |
| TV 键 | KEYCODE_TV | 170 |
| 电源键 | KEYCODE_TV_POWER | 177 |
| 多媒体键 播放/暂停 | KEYCODE_MEDIA_PLAY_PAUSE | 85 |
| 多媒体键 快进 | KEYCODE_MEDIA_FAST_FORWARD | 95 |
| 多媒体键 快退 | KEYCODE_MEDIA_REWIND | 89 |
| 多媒体键 上一首 | KEYCODE_MEDIA_PREVIOUS | 88 |
| 多媒体键 下一首 | KEYCODE_MEDIA_NEXT | 87 |
字符输入
支持中/英字符,借助手机软键盘将字符输入到 Android TV 中。注意中文字符需要ADBKeyboard支持。

英文字符的 shell 命令如下:
shell input text <string> # 向设备输入按键事件
中文字符的 shell 命令如下,需要ADBKeyboard的支持:
shell am start -a android.intent.action.VIEW -d <string>
切换输入法命令如下:
shell ime set <app>
# 例如
shell ime set com.android.adbkeyboard/.AdbIME # 切换到ADBKeyboard
获取当前输入法:
shell settings get secure default_input_method
快捷启动
下图是一些可快速启动的软件

对应的 shell 命令如下:
shell am start <package/activity> # 向设备输入按键事件
# 例如
shell am start com.github.tvbox.osc/.ui.activity.HomeActivity # 启动TVBox
快捷启动软件可从软件仓库中添加,仓库从在线地址中解析,该 json 文件为项目根目录中的apps.json。例如
[
{
"name": "TVBox",
"icon": "https://raw.githubusercontent.com/SX-Code/ADBRemoteATV/main/icons/tvbox.png",
"url": "com.github.tvbox.osc/.ui.activity.HomeActivity"
},
{
"name": "TVBox UI美化版",
"icon": "https://raw.githubusercontent.com/SX-Code/ADBRemoteATV/main/icons/tvbox.png",
"url": "com.github.tvbox.osc.tk/com.github.tvbox.osc.ui.activity.HomeActivity"
},
]
其中:
name:为该软件的名称icon:为该软件的图标,便于展示url:为该软件的启动路径。格式参考com.github.tvbox.osc/.ui.activity.HomeActivity
如何获取一个 APP 的启动路径,可从该软件的 AndroidManifest.xml 文件中获取,下面是一个示例文件,
- 从
manifest标签中找到package属性,为启动路径的包 package - 从带有
LAUNCHER的activity中找到android:name属性,为启动路径的 activity package/activity组合起来就是启动命令的路径参数。
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:compileSdkVersion="33"
android:compileSdkVersionCodename="13"
package="tech.simha.androidtvremote"
platformBuildVersionCode="33" platformBuildVersionName="13">
<application
android:appComponentFactory="androidx.core.app.CoreComponentFactory"
android:hardwareAccelerated="true"
android:icon="@mipmap/launcher_icon"
android:label="Remote ATV"
android:name="android.app.Application">
<activity
android:exported="true"
android:hardwareAccelerated="true"
android:launchMode="singleTop"
android:name="tech.simha.androidtvremote.MainActivity"
android:screenOrientation="portrait"
android:theme="@style/LaunchTheme"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
软件界面

项目地址
Gitee:https://gitee.com/SX-Code/ADBRemoteATV
Github: https://github.com/SX-Code/ADBRemoteATV
鸣谢
ADBlib:https://github.com/cgutman/AdbLib
ADBKeyboard:https://github.com/senzhk/ADBKeyBoard?tab=readme-ov-file
圆形菜单按键:https://github.com/D10NGYANG/DL10RoundMenuView
数字进度条:https://github.com/daimajia/NumberProgressBar
基于ADB Shell 实现的 Android TV、电视盒子万能遥控器 — ADB Remote ATV的更多相关文章
- Android TV 电视调试和遥控器事件监听
Android TV 真机调试 要进行Android TV开发免不了要进行真机调试. 1.确定电视盒子和开发机器在同一局域网中 2.打开电视盒子的adb允许调试开关 3.进入adb所在文件夹进行adb ...
- 使用adb shell dumpsys检测Android的Activity任务栈
谈起Android程序开发,就需要了解其四个主要的部件:Activity.Service.ContentProvider. BroadcastReceiver.而其中Activity是唯一直接控制程序 ...
- Android手机、电视(盒子) 打开ADB调试 一览表
手机.电视(盒子) 打开ADB调试 一览表 一.手机打开ADB调试方法 序号 名称 描述 方式 1 华为手机 EMUI 1.设置 ->关于手机-> 版本号 点击(4~5次)2.返回设置 - ...
- ubuntu 使用adb shell命令识别android设备
ubuntu 使用adb shell命令配置 在ubuntu下使用adb 命令识别Android设备需配置adb_usb.ini 文件 文件路径: ~/.android/ ,若不存在创建该文件. a ...
- 安卓TV开发(三) 移动智能设备之实现主流TV电视盒子焦点可控UI
前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家居,以及可穿戴设备的大量使用,但是这些设备上的开发并不是和传统手机开发一样,特别是焦点控制和用户操作体验上有很大的区别,本系列博文主 ...
- 【开源项目】电视盒子好用又强大的APP: TVRemoteIME
TVRemoteIME 电视盒子的远程输入法应用,可跨屏远程输入.跨屏远程控制盒子.远程文件管理.HTTP/RTMP/MMS网络视频直播.ED2K/种子文件的视频文件边下边播 应用的诞生 自从家里有电 ...
- 电视盒子好用又强大的跨屏远程输入法 TVRemoteIME
应用包下载地址: https://github.com/kingthy/TVRemoteIME/raw/master/released/IMEService-release.apk TVRemoteI ...
- Android系统在超级终端下必会的命令大全(adb shell命令大全)
. 显示系统中全部Android平台: android list targets . 显示系统中全部AVD(模拟器): android list avd . 创建AVD(模拟器): android c ...
- Android adb shell命令大全
1. 显示系统中全部Android平台: android list targets 2. 显示系统中全部AVD(模拟器): android list avd 3. 创建AVD(模拟器): androi ...
- Android成长记(1)-----android环境搭建与adb shell 命令
整理一下学习android一步一步存下来的自己总结或是从网上摘抄的比较不错的文档,电脑要上交了,最舍不得的就是自己积累的这么点东西了,所以决定发布到黎梓小站,以供大家一起学习以及自己日后忘记了也有地方 ...
随机推荐
- 深度优先搜索-overview
深度优先搜索的实现一般有2种方式 递归 //todo 非递归-借助stack 因为栈后进先出的特点,使其很容易实现树/图的深度优先遍历.如果是BFS,那非递归经常借助queue. 整个过程可以被描述为 ...
- Python2同时输出中文和变量时中文乱码
Python2同时输出中文和变量时中文乱码 一.问题描述 最近在学习tensorflow时,突然发现一个问题,python2在输出中文和变量时会出现一点问题,如下图: 可以看到,输出并不是想要的结果, ...
- 重新点亮linux 命令树————网络配置的查看[十一三]
前言 简单整理一下网络配置. 正文 通过ifconfig 查看. 这个就是ip地址. 网卡mac地址. 还有一块信息非常重要: 这个io开头的信息,这里面就是我们127.0.0.1的信息. 那么就来演 ...
- Go 单元测试基本介绍
目录 一.单元测试基本介绍 1.1 什么是单元测试? 1.2 如何写好单元测试 1.3 单元测试的优点 1.4 单元测试的设计原则 二.Go语言测试 2.1 Go单元测试概要 2.2 Go单元测试基本 ...
- Unity性能优化——资源优化(一)
实际项目中发现的许多问题都是源自无心之过:临时的"测试"更改和疲惫不堪的开发人员的误点击可能会暗地里添加性能不良的资源或更改现有资源的导入设置. 对于任何大规模的项目,最好是将防止 ...
- RocketMQ实战系列(一)——RocketMQ简介
RocketMQ是一款分布式消息引擎,由阿里巴巴旗下的MetaQ和RocketMQ合并而来.RocketMQ提供了高可靠.高吞吐量.可伸缩.易于使用的消息发布/订阅服务,适用于大规模分布式系统的消息通 ...
- 【SQL】将日期时间转换成年月日的日期形式
[SQL]将日期时间转换成年月日的日期形式 这段时间写力扣的SQL题,发现了各式各样的转换时间的方法,正好记录一下 TO_CHAR(XXX,'YYYY-MM-DD') 这个在Oracle应该是很常用的 ...
- 力扣448(java)-找到数组中所有消失的数(简单)
题目: 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内.请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果. 示例 ...
- 使用 Gradio 的“热重载”模式快速开发 AI 应用
在这篇文章中,我将展示如何利用 Gradio 的热重载模式快速构建一个功能齐全的 AI 应用.但在进入正题之前,让我们先了解一下什么是重载模式以及 Gradio 为什么要采用自定义的自动重载逻辑.如果 ...
- Redis消息队列发展历程
简介:Redis是目前最受欢迎的kv类数据库,当然它的功能越来越多,早已不限定在kv场景,消息队列就是Redis中一个重要的功能.Redis从2010年发布1.0版本就具备一个消息队列的雏形,随着1 ...