feat: 扫码配置——扫平台上生成的二维码,一次配好(v1.4)

场景:设备还没接进平台、或人站在机架前不想插线时,原来得在手机上手动输平台地址和
令牌(还可能漏指纹)。现在平台「设备池」里点某台设备的「二维码」,手机上点
「扫码配置」扫一下即完成。

- ScanActivity:Camera1 + **ZXing core**(刻意不用 ML Kit —— 那要 Google Play 服务,
  国内机型普遍没有);QR 的定位图案让 ZXing 自带旋转不变性,不用手动转 YUV 帧
- 二维码内容(平台侧生成):{"v":1,"server":…,"token":…,"fingerprint":…,"name":…}
  —— 指纹只能由平台给(应用读不到 ro.serialno,见 Prefs 说明),扫码正好是最省事的传递方式
- MainActivity 加「扫码配置」按钮(原「配置」改名「手动配置」)

实机踩到的坑(已修):
- **相机必须在拿到权限后再打开**:surfaceCreated 早于权限回调触发,先开相机会报
  "Fail to connect to camera service" 并把流程直接断掉(第一次实测就是这么挂的)
  → 改成 surfaceCreated 只记下 holder,授权回调里再开
- `params.previewSize = size` 编译不过:setPreviewSize 收的是两个 int 不是 Size 对象

实测(A07 / USB 连接):扫码 → 相机启动 → 解码 → 保存 → 立刻拉清单,
平台认出「A07」,全程无需打字、无需 adb。
This commit is contained in:
2026-09-13 16:42:07 +08:00
parent 2580cfaead
commit f100301a56
4 changed files with 244 additions and 7 deletions
+8 -5
View File
@@ -11,8 +11,8 @@ android {
applicationId "com.example.deviceagent"
minSdk 29 // Android 10;剪贴板限制就是从这一版开始的
targetSdk 34
versionCode 4
versionName "1.3"
versionCode 5
versionName "1.4"
}
buildTypes {
@@ -42,8 +42,11 @@ android {
}
dependencies {
// 刻意只引一个 androidx.core:只为 FileProvider(把下载的 APK 授权给系统安装器读)。
// HTTP 用 HttpURLConnection、JSON 用 org.json(都是系统内置),不引网络/序列化库——
// 依赖越少,构建越快、出问题越好排查。
// 刻意只引两个:
// androidx.core —— 只为 FileProvider(把下载的 APK 授权给系统安装器读)
// zxing core —— 扫码配置用。**刻意不用 ML Kit**:那要 Google Play 服务,
// 国内机型上普遍没有,扫码会直接不可用。
// HTTP 用 HttpURLConnection、JSON 用 org.json(系统内置),不引网络/序列化库。
implementation 'androidx.core:core-ktx:1.13.1'
implementation 'com.google.zxing:core:3.5.3'
}