2026-11-09 10:29:17 +08:00
4k
2026-11-09 10:29:17 +08:00
2026-11-09 08:47:15 +08:00
2026-11-09 08:47:15 +08:00
2026-11-09 08:47:15 +08:00
2026-11-09 08:47:15 +08:00
2026-11-09 08:47:15 +08:00
2026-11-09 08:47:15 +08:00
2026-11-09 08:47:15 +08:00

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. 确认设备已连接

adb devices

应看到至少一行设备(如 emulator-5554 device)。若为 offline 或 unauthorized,先处理连接/授权。

2. 多设备时指定当前 TV 设备

若列表里有多台设备,必须指定要调试的那台:

adb -s emulator-5554 forward tcp:8767 tcp:8766

把 emulator-5554 换成你 adb devices 里那台 TV 模拟器的序列号。

3. 使用 adb forward(Windows 上 reverse 可能不监听,用 forward)

adb forward --remove tcp:8767
adb forward tcp:8767 tcp:8766

多设备时加 -s <设备号>,例如:adb -s emulator-5554 forward tcp:8767 tcp:8766。

4. 确认转发已生效

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):

    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 里执行:

curl -v http://127.0.0.1:8767/

或在 PowerShell:

(Invoke-WebRequest -Uri http://127.0.0.1:8767/ -UseBasicParsing -TimeoutSec 5).StatusCode
  • 若返回 200 或能看到 HTML:说明端口通,再试浏览器(可换无痕/别的浏览器)。
  • 若 连接被拒绝 / Connection refused:多半是 TV 里弹窗没开或服务未启动,请先在 TV 里打开「手机遥控」弹窗再执行上述命令。
  • 若 超时:检查本机防火墙或杀毒是否拦截本地 8767。

10. 一键执行(单设备时)

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。

S
Description
No description provided
Readme
2.2 MiB
Languages
Kotlin 94.7%
HTML 5.3%