ddd5009bb1e88659deb66d2fc75e406023996b4b
- FeatureMount: HOME tab now mounts ProjectWorkspaceFragment; delete placeholder HomeFragment - app/build.gradle.kts + libs.versions.toml: add androidx recyclerview and swiperefreshlayout for project list and pull-to-refresh - NetworkModule: register ProjectApi (M2 2.5.1.1 GetProjectList) via provideProjectApi - SessionRepository: add SessionState.Restoring as initial state so cold start renders neutral loading instead of prompting login - MineFragment/layout: consumer-grade flow with horizontal identity card (whole card acts as login CTA when signed out), config warning card, grouped settings rows; drop back button and manual refresh entry - MineViewModel: remove manual refresh(); session restore is now automatic on cold start - LoginFragment/layout: MaterialToolbar back, segmented MaterialButtonToggleGroup for account/SMS mode, TextInputLayout floating-label inputs, linear progress below button - ConfigFragment/ChangePasswordFragment layouts: unify back navigation to Toolbar, switch plain EditTexts to TextInputLayout, replace ProgressBar with LinearProgressIndicator - strings.xml: add M2 home workbench copy and mine/login labels; remove unused action_back, mine_login, mine_refresh, mine_config_ready, mine_logout_confirm
task(0a00ccbd-6f98-4730-adf2-6f1e864823de): Mount M2 project workbench home and modernize M1 layouts
task(0a00ccbd-6f98-4730-adf2-6f1e864823de): Mount M2 project workbench home and modernize M1 layouts
task(0a00ccbd-6f98-4730-adf2-6f1e864823de): Mount M2 project workbench home and modernize M1 layouts
监测数据不落地平台 · 安卓客户端
外业监测数据「不落地」采集与上传工具:现场用手机通过蓝牙连接振弦式读数仪(IE-1000)与综合采集仪(VM208),解析采集数据并直接上传至院方监测平台,配合离线队列保证弱网/断网可用。
本文件为 2026-09-03 重建版(基线文件曾随工作树清理丢失,按任务记录复刻)。
技术基线
| 项 | 选型 |
|---|---|
| 语言 / UI | Kotlin 2.0.21、View 体系 + Material 3 |
| 架构 | MVVM(ViewModel + StateFlow/LiveData) |
| 网络 | Retrofit 2.11 + OkHttp 4.12 + kotlinx.serialization 1.7.3 |
| 本地存储 | Room 2.6.1(离线优先队列)+ DataStore 1.1.1 + EncryptedSharedPreferences |
| 依赖注入 | Hilt 2.52 |
| 蓝牙 | Android 原生 BLE API;协议解析独立纯 Kotlin 模块 |
| 构建 | AGP 8.7.3 / Gradle 8.10.2 / JDK 17 / minSdk 26 / targetSdk 34 |
模块结构
app 业务壳:导航、主题、权限、配置注入(M1–M6 页面挂载点)
core
├ common AppResult / UiState / 日志门面(纯 Kotlin 优先)
├ network 鉴权三要素拦截器、ApiEnvelope 统一解析、Retrofit 装配
├ database Room AppDatabase + 上传队列(离线优先参考实现)
└ ble BLE 扫描(按名称前缀过滤)、GATT 连接封装骨架
ble-protocol 纯 Kotlin JVM:IE-1000 / VM208 帧解析(零 Android 依赖,可独立单测)
依赖方向:app → core:* + ble-protocol;core:{network,database,ble} → core:common;ble-protocol 零依赖。
快速开始
- Android Studio(Ladybug+,JDK 17)打开工程根目录,等待 Gradle Sync;
- 服务器地址、SecretKey、SystemCode 通过
app壳的配置仓储注入(见core:network的NetworkConfig),一律不写入代码库; - 运行:
./gradlew :app:assembleDebug;协议单测:./gradlew :ble-protocol:test。
配置说明
| 配置项 | 说明 | 注入点 |
|---|---|---|
| baseUrl | 平台接口地址(测试环境见接口文档 1.2.4) | ConfigRepository → NetworkConfig |
| SecretKey | 供应商调用密钥(会定期更换,必须可配置) | 同上 |
| SystemCode | 供应商编码(与 SecretKey 一一对应) | 同上 |
| Token | 登录后颁发,登录接口外必带 | TokenProvider(DataStore) |
文档索引
docs/安卓客户端功能明细表.md—— 36 个功能点、模块映射、优先级、接口覆盖对照docs/安卓客户端开发计划表.md—— 6 阶段 12 周迭代计划、人日估算、里程碑、风险docs/BLE-IE1000.txt—— IE-1000 / VM208 蓝牙协议原始说明- 接口规范 V4.5 —— 上海城建勘测院《监测数据不落地系统接口文档》(docs/ 下 docx)
Description
Languages
Java
52.7%
Kotlin
47.3%