基于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
本文來自博客園,作者:sw-code,轉載請注明原文鏈接:http://www.rzrgm.cn/sw-code/p/18206967

浙公網安備 33010602011771號