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

254 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
**状态**: ✅ 功能实现完成