6.4 KiB
6.4 KiB
SkyLink Android App - Navigation & Settings 功能实现
📋 项目概述
本次更新为 SkyLink Android 应用添加了以下功能:
- Navigation 导航框架 - 支持多页面切换
- 设置界面 - 可配置的应用设置
- 网络 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 模式
- 单个 Ping - 诊断指定主机
- 多个 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 设计特点
- 底部导航栏 - 快速访问首页和设置
- Material Design - 现代化的 UI 设计
- 响应式布局 - 适配不同屏幕尺寸
- 可滚动设置页面 - 避免内容过长
- 实时进度反馈 - 加载动画和结果显示
⚠️ 注意事项
-
权限要求
INTERNET- Ping 功能需要网络访问ACCESS_NETWORK_STATE- 检查网络状态CHANGE_NETWORK_STATE- 修改网络设置
-
系统兼容性
- Ping 工具自动检测 Windows/Linux 系统,使用相应命令
- 最低 SDK: 24(Android 7.0)
- 目标 SDK: 34(Android 14)
-
性能优化
- Ping 操作在 IO 线程执行,不阻塞 UI
- 使用 Coroutines 的
async实现并行 Ping - Fragment 销毁时自动停止 UDP 接收
📚 相关文档
🔄 后续改进建议
- 设置持久化 - 使用 SharedPreferences 保存用户设置
- Ping 历史记录 - 记录诊断结果用于分析
- 高级诊断工具 - 追踪路由 (traceroute)、DNS 查询等
- 主题切换 - 支持亮色/暗黑主题
- 多语言支持 - 添加英文、日文等语言
完成日期: 2026-01-19
版本: 1.1.0
状态: ✅ 功能实现完成