Files
flyLink/skylink_android_app/NAVIGATION_SETTINGS_GUIDE.md
flowerstonezl 056289625c init
2026-01-19 17:08:49 +08:00

6.4 KiB
Raw Blame History

SkyLink Android App - Navigation & Settings 功能实现

📋 项目概述

本次更新为 SkyLink Android 应用添加了以下功能:

  1. Navigation 导航框架 - 支持多页面切换
  2. 设置界面 - 可配置的应用设置
  3. 网络 Ping 诊断 - 检测网络连接和延迟

新增功能说明

1. Navigation 导航系统

文件结构

app/src/main/res/
├── navigation/
│   └── nav_graph.xml              # 导航图表定义
└── menu/
    ├── bottom_nav_menu.xml        # 底部导航菜单
    └── activity_main_menu.xml     # 顶部菜单

主要特性

  • 底部导航栏 (Bottom Navigation)
  • 顶部菜单栏 (ActionBar Menu)
  • Fragment 管理和切换
  • 自动化状态管理

导航目的地

  • 首页 (HomeFragment) - 视频、GPS 和统计显示
  • 设置 (SettingsFragment) - 应用设置和网络诊断

2. 设置界面 (SettingsFragment)

功能特性

📡 网络设置区域

  • UDP 端口配置 - 自定义监听端口
  • 实时端口号验证

🌐 网络诊断 (Ping) 区域

  • 目标主机输入 - 支持 IP 地址和域名

  • Ping 参数配置

    • Ping 次数1、2、4、8、16
    • 超时时间1秒、3秒、5秒、10秒
  • 两种 Ping 模式

    1. 单个 Ping - 诊断指定主机
    2. 多个 Ping - 并行检测多个常见服务器
      • 8.8.8.8 (Google DNS)
      • 1.1.1.1 (Cloudflare DNS)
      • 114.114.114.114 (国内 DNS)
      • 192.168.1.1 (本地网关)

结果显示

  • 成功:显示最小/最大/平均延迟和丢包率
  • 失败:显示具体错误信息
  • 进度指示:操作进行中显示加载动画
  • 可选择的结果文本,支持复制

3. 网络 Ping 工具 (PingUtil)

类结构

PingResult 数据类

data class PingResult(
    val host: String,              // 目标主机
    val isSuccess: Boolean,        // 是否成功
    val minTime: Long = 0,         // 最小延迟 (ms)
    val maxTime: Long = 0,         // 最大延迟 (ms)
    val avgTime: Long = 0,         // 平均延迟 (ms)
    val packetLoss: Double = 0.0,  // 丢包率 (%)
    val errorMessage: String = ""  // 错误信息
)

PingUtil 工具类

// 单个 Ping
suspend fun ping(host: String, count: Int = 4, timeout: Int = 5): PingResult

// 顺序 Ping 多个主机
suspend fun pingMultiple(hosts: List<String>, count: Int = 4, timeout: Int = 5): List<PingResult>

// 并行 Ping 多个主机(推荐)
suspend fun pingMultipleParallel(hosts: List<String>, count: Int = 4, timeout: Int = 5): List<PingResult>

技术细节

  • 使用 Coroutines 异步执行,不阻塞 UI
  • 自动适配 Windows 和 Linux/Android 系统命令
  • 完整的异常处理
  • 支持自定义超时时间

📦 项目文件清单

新增文件

Kotlin 源代码

app/src/main/java/com/skylink/app/
├── ui/
│   ├── HomeFragment.kt            # 首页 Fragment原 MainActivity 逻辑)
│   └── SettingsFragment.kt        # 设置 Fragment
└── utils/
    └── PingUtil.kt                # Ping 诊断工具

Layout XML

app/src/main/res/layout/
├── fragment_home.xml              # 首页布局
└── fragment_settings.xml          # 设置页面布局(含 Ping 诊断)

Navigation & Menu

app/src/main/res/
├── navigation/
│   └── nav_graph.xml              # 导航图表
├── menu/
│   ├── bottom_nav_menu.xml        # 底部导航菜单
│   └── activity_main_menu.xml     # 顶部菜单
├── drawable/
│   └── settings_result_bg.xml     # 结果区域背景样式
└── color/
    └── bottom_nav_color.xml       # 导航栏颜色状态

修改文件

Gradle 配置

app/build.gradle.kts              # 添加 Navigation 和 Fragment 依赖

活动和主布局

app/src/main/java/com/skylink/app/MainActivity.kt  # 改为 Navigation 容器
app/src/main/res/layout/activity_main.xml          # 使用 NavHostFragment

🔧 依赖管理

新增依赖

// Navigation
implementation("androidx.navigation:navigation-fragment-ktx:2.7.5")
implementation("androidx.navigation:navigation-ui-ktx:2.7.5")

// Fragment
implementation("androidx.fragment:fragment-ktx:1.6.2")

这些依赖已自动添加到 build.gradle.kts


🚀 使用示例

在代码中调用 Ping

// 在 Fragment 或 Activity 中
lifecycleScope.launch {
    // 单个 Ping
    val result = PingUtil.ping("8.8.8.8", count = 4, timeout = 5)
    if (result.isSuccess) {
        println("平均延迟: ${result.avgTime} ms")
    }
    
    // 并行 Ping 多个主机
    val results = PingUtil.pingMultipleParallel(
        listOf("8.8.8.8", "1.1.1.1", "114.114.114.114"),
        count = 4,
        timeout = 5
    )
}

导航到不同页面

// 从代码导航
navController.navigate(R.id.settingsFragment)

// 自动处理(通过底部导航栏点击或菜单项)

🎨 UI 设计特点

  1. 底部导航栏 - 快速访问首页和设置
  2. Material Design - 现代化的 UI 设计
  3. 响应式布局 - 适配不同屏幕尺寸
  4. 可滚动设置页面 - 避免内容过长
  5. 实时进度反馈 - 加载动画和结果显示

⚠️ 注意事项

  1. 权限要求

    • INTERNET - Ping 功能需要网络访问
    • ACCESS_NETWORK_STATE - 检查网络状态
    • CHANGE_NETWORK_STATE - 修改网络设置
  2. 系统兼容性

    • Ping 工具自动检测 Windows/Linux 系统,使用相应命令
    • 最低 SDK: 24Android 7.0
    • 目标 SDK: 34Android 14
  3. 性能优化

    • Ping 操作在 IO 线程执行,不阻塞 UI
    • 使用 Coroutines 的 async 实现并行 Ping
    • Fragment 销毁时自动停止 UDP 接收

📚 相关文档


🔄 后续改进建议

  1. 设置持久化 - 使用 SharedPreferences 保存用户设置
  2. Ping 历史记录 - 记录诊断结果用于分析
  3. 高级诊断工具 - 追踪路由 (traceroute)、DNS 查询等
  4. 主题切换 - 支持亮色/暗黑主题
  5. 多语言支持 - 添加英文、日文等语言

完成日期: 2026-01-19
版本: 1.1.0
状态: 功能实现完成