Files
flyLink/skylink_android_app/NAVIGATION_SETTINGS_GUIDE.md

254 lines
6.4 KiB
Markdown
Raw Normal View History

2026-01-19 17:08:49 +08:00
# 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 数据类**
```kotlin
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 工具类**
```kotlin
// 单个 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
```
---
## 🔧 依赖管理
### 新增依赖
```kotlin
// 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
```kotlin
// 在 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
)
}
```
### 导航到不同页面
```kotlin
// 从代码导航
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 接收
---
## 📚 相关文档
- [Android Navigation 官方文档](https://developer.android.com/guide/navigation)
- [Kotlin Coroutines 文档](https://kotlinlang.org/docs/coroutines-overview.html)
- [Material Design 3](https://m3.material.io/)
---
## 🔄 后续改进建议
1. **设置持久化** - 使用 SharedPreferences 保存用户设置
2. **Ping 历史记录** - 记录诊断结果用于分析
3. **高级诊断工具** - 追踪路由 (traceroute)、DNS 查询等
4. **主题切换** - 支持亮色/暗黑主题
5. **多语言支持** - 添加英文、日文等语言
---
**完成日期**: 2026-01-19
**版本**: 1.1.0
**状态**: ✅ 功能实现完成