Files
tv/README.md
T
2026-11-09 08:47:15 +08:00

172 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TV 浏览器
在 Android TV 上使用的简易网页浏览器应用,基于 WebView,支持遥控器 D-pad 导航。
## 功能
- **网页浏览**:使用系统 WebView 加载网页,支持 JavaScript。
- **工具栏**:后退、前进、刷新、首页、地址栏、前往,均支持遥控器焦点。
- **遥控器操作**:
- D-pad 在工具栏按钮和地址栏、WebView 之间切换焦点。
- 中心键/确认键在地址栏按下可执行“前往”。
- 返回键在可后退时先后退网页,否则退出应用。
- **从外部打开链接**:支持作为浏览器处理 `http`/`https` 链接(如从其他应用“在浏览器中打开”)。
## 环境要求
- Android Studio Ladybug (2024.2.1) 或更高版本(推荐)
- JDK 17
- 目标设备:Android TV(Android 5.0 / API 21+,且支持 Leanback)
## 构建与运行
1. 用 **Android Studio** 打开本项目根目录(`tv` 文件夹)。
2. 等待 Gradle 同步完成。
3. 连接 Android TV 设备或启动 TV 模拟器:
- 设备:开启开发者选项与 USB 调试,用 USB 连接电脑。
- 模拟器:**Device Manager** → **Create Device** → 选择 TV 设备(如 “TV (1080p)”)→ 选择系统镜像并启动。
4. 点击 **Run**(绿色三角)或使用 `Shift+F10`,选择 TV 设备/模拟器,安装并运行应用。
在 TV 主屏的“应用”列表中可看到 **TV 浏览器**,进入后即可输入网址或使用默认首页进行浏览。
## 项目结构概览
```
tv/
├── app/
│ ├── src/main/
│ │ ├── AndroidManifest.xml # TV 与浏览器声明、权限
│ │ ├── java/com/tv/browser/
│ │ │ └── BrowserActivity.kt # 主界面与 WebView 逻辑
│ │ └── res/
│ │ ├── layout/activity_browser.xml
│ │ ├── values/strings.xml, colors.xml, themes.xml
│ │ └── drawable/ # 图标、焦点背景等
│ ├── build.gradle.kts
│ └── proguard-rules.pro
├── gradle/
│ ├── libs.versions.toml
│ └── wrapper/gradle-wrapper.properties
├── build.gradle.kts
├── settings.gradle.kts
└── README.md
```
## 自定义
- **默认首页**:在 `app/src/main/res/values/strings.xml` 中修改 `default_home_url`(当前为 `https://www.google.com`),可改为任意合法 URL。
- **主题与颜色**:在 `res/values/colors.xml` 和 `themes.xml` 中调整。
- **TV 主屏图标**:替换 `res/drawable/banner.xml` 或使用 320×180 的横条图(banner)资源。
## 许可
本项目仅供学习与参考使用。浏览器内核为系统 WebView,实际渲染与安全策略取决于设备系统版本。
启动模拟器
C:\Users\wucongxing\AppData\Local\Android\Sdk\emulator\emulator -avd Television_720p -dns-server 8.8.8.8,8.8.4.4
C:\Users\wucongxing\AppData\Local\Android\Sdk\platform-tools\adb forward tcp:8767 tcp:8766
---
## 手机遥控 · 模拟器调试(电脑访问 127.0.0.1:8767 打不开时排查)
电脑浏览器访问 `http://127.0.0.1:8767` 需要先做 **adb 端口转发**(`adb forward`;Windows 上 `reverse` 可能不监听,用 `forward`),并按下面顺序排查。
### 1. 确认设备已连接
```bash
adb devices
```
应看到至少一行设备(如 `emulator-5554 device`)。若为 `offline` 或 `unauthorized`,先处理连接/授权。
### 2. 多设备时指定当前 TV 设备
若列表里有多台设备,必须指定要调试的那台:
```bash
adb -s emulator-5554 forward tcp:8767 tcp:8766
```
把 `emulator-5554` 换成你 `adb devices` 里那台 TV 模拟器的序列号。
### 3. 使用 adb forward(Windows 上 reverse 可能不监听,用 forward)
```bash
adb forward --remove tcp:8767
adb forward tcp:8767 tcp:8766
```
多设备时加 `-s <设备号>`,例如:`adb -s emulator-5554 forward tcp:8767 tcp:8766`。
### 4. 确认转发已生效
```bash
adb forward --list
```
应出现一行:`emulator-5554 tcp:8767 tcp:8766`(或你的设备号)。
### 5. 先在模拟器里启动遥控服务(必须)
- 在 **TV 模拟器**里打开 **TV 浏览器**,点击工具栏 **「手机遥控」**(弹窗会打开,服务启动;关掉弹窗后服务也会常驻)。
- 在模拟器里点弹窗的 **「在电视上打开」**,应能打开遥控页;若 TV 里能打开,说明本机 8766 服务正常。
- **未在模拟器里点过「手机遥控」时,电脑访问 8767 会连不上。**
### 6. 在电脑上再试 8767
确认上一步 TV 里能打开 127.0.0.1:8766 后,在电脑执行:`Invoke-WebRequest -Uri http://127.0.0.1:8767/ -UseBasicParsing` 或浏览器访问 `http://127.0.0.1:8767`。
### 7. 电脑仍连不上 8767 时
按顺序做:
1. **确认本机 8767 有进程在听**(PowerShell 或 CMD):
```powershell
netstat -ano | findstr :8767
```
应有至少一行 `LISTENING`(多为 adb)。若**没有任何输出**,说明 adb 未在本机监听 8767,可尝试:
- 用设备号再绑一次:`adb -s emulator-5554 forward --remove tcp:8767`,再 `adb -s emulator-5554 forward tcp:8767 tcp:8766`
- 重启 adb:`adb kill-server`,再 `adb start-server`,再执行上述 forward
- 用**管理员身份**打开 PowerShell/CMD 再执行 `adb forward tcp:8767 tcp:8766`
2. **确认模拟器里服务已启动**:在 TV 模拟器里打开 TV 浏览器 → 点一次 **「手机遥控」**(可再关弹窗)→ 在 TV 里点「在电视上打开」能打开 127.0.0.1:8766 的页面。若 TV 里都打不开,先解决模拟器内 8766 再试电脑 8767。
3. **本机防火墙**:临时关 Windows 防火墙或为“专用/本地”网络放行,再试 `Invoke-WebRequest -Uri http://127.0.0.1:8767/ -UseBasicParsing`。
4. **换用 curl 试**(若已安装):`curl -v http://127.0.0.1:8767/`
### 8. 服务常驻说明
设备上的 8766 服务在**点过一次「手机遥控」后常驻**,关弹窗不关服务。请务必先完成「5. 先在模拟器里启动遥控服务」再在电脑访问 8767。
### 9. 在电脑上确认 8767 是否通
在 **PowerShell** 或 **CMD** 里执行:
```powershell
curl -v http://127.0.0.1:8767/
```
或在 PowerShell:
```powershell
(Invoke-WebRequest -Uri http://127.0.0.1:8767/ -UseBasicParsing -TimeoutSec 5).StatusCode
```
- 若返回 **200** 或能看到 HTML:说明端口通,再试浏览器(可换无痕/别的浏览器)。
- 若 **连接被拒绝 / Connection refused**:多半是 TV 里弹窗没开或服务未启动,请先在 TV 里打开「手机遥控」弹窗再执行上述命令。
- 若 **超时**:检查本机防火墙或杀毒是否拦截本地 8767。
### 10. 一键执行(单设备时)
```bash
adb forward --remove tcp:8767
adb forward tcp:8767 tcp:8766
adb forward --list
```
看到 `tcp:8767 tcp:8766` 后,**在 TV 应用里点一次「手机遥控」启动服务**,再在电脑访问 `http://127.0.0.1:8767`。