李岩岩 2a565fb8da feat(android-tv): 创建 Android TV WebView 壳应用
- 添加 TV 专用的 Leanback 主题和配置
- 支持遥控器 D-Pad 导航
- 添加 AssetReader JS 接口
- 强制横屏显示
- 处理遥控器按键(返回、菜单、信息)
2026-02-05 12:41:41 +08:00

102 lines
2.5 KiB
Markdown

# Android TV WebView 壳
为 Android TV 设备(包括智能电视、电视盒子等)提供的 WebView 套壳应用。
## 特性
-**Leanback 支持** - 专为 TV 优化的主题和启动器
-**D-Pad 导航** - 遥控器方向键支持,自动注入 JS 导航
-**全屏沉浸** - 无状态栏/导航栏,纯全屏体验
-**横屏锁定** - 强制横屏显示
-**按键处理** - 支持返回、菜单、信息键等遥控器按键
## 目录结构
```
android-tv/
├── app/src/main/
│ ├── java/com/iptv/tv/
│ │ └── MainActivity.java # TV 主活动(含 D-Pad 支持)
│ ├── res/
│ │ ├── layout/activity_main.xml
│ │ ├── values/
│ │ │ ├── strings.xml
│ │ │ ├── styles.xml # Leanback 主题
│ │ │ └── colors.xml
│ │ └── drawable/
│ │ └── ic_banner.xml # TV 启动器横幅
│ ├── assets/
│ │ └── www/ # 打包的 Web 资源
│ └── AndroidManifest.xml # TV 特定配置
├── build.sh # 一键构建脚本
└── ...
```
## 构建步骤
```bash
# 1. 构建 Web UI
cd ../ui
npm install
npm run build
# 2. 构建 Android TV APK
cd ../android-tv
./build.sh
```
APK 输出: `app/build/outputs/apk/debug/app-debug.apk`
## TV 特定配置
### AndroidManifest.xml
```xml
<!-- TV 必需特性 -->
<uses-feature android:name="android.software.leanback" android:required="true" />
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
<!-- TV 启动器 -->
<intent-filter>
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
```
### D-Pad 导航支持
应用自动注入 JavaScript 代码,使 Web 应用支持遥控器方向键导航:
- **方向键** - 在可聚焦元素间移动
- **确认键** - 点击当前聚焦元素
- **返回键** - 页面后退/退出应用
- **菜单键** - 刷新页面
- **信息键** - 显示版本信息
## 遥控器按键映射
| 按键 | 功能 |
|------|------|
| 上/下/左/右 | 导航焦点 |
| 确认/OK | 点击 |
| 返回 | 页面后退 |
| 菜单 | 刷新页面 |
| 信息/INFO | 显示版本 |
## 开发与调试
1. **ADB 连接 TV**
```bash
adb connect <TV_IP>:5555
adb install app-debug.apk
```
2. **查看日志**
```bash
adb logcat -s IPTV:D
```
3. **远程调试**
```bash
adb shell am start -a android.intent.action.VIEW -d "http://<dev_server>:5173"
```