254 lines
6.4 KiB
Markdown
254 lines
6.4 KiB
Markdown
|
|
# 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: 24(Android 7.0)
|
|||
|
|
- 目标 SDK: 34(Android 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
|
|||
|
|
**状态**: ✅ 功能实现完成
|