init
This commit is contained in:
@@ -0,0 +1,172 @@
|
||||
# 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`。
|
||||
Reference in New Issue
Block a user