From 78d1977b9807f35bd5adb13d7f1ebcb68bfd54e5 Mon Sep 17 00:00:00 2001 From: dongliang Date: Thu, 7 May 2026 15:10:06 +0930 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BB=A3=E7=A0=81=E9=81=97=E6=BC=8F?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=88NFC=E5=9B=9E=E8=B0=83=E5=AE=89?= =?UTF-8?q?=E5=85=A8+=E7=BB=91=E5=AE=9A=E7=94=B5=E9=87=8F+=E4=BF=A1?= =?UTF-8?q?=E5=8F=B7=E5=88=9D=E5=A7=8B=E5=80=BC=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. NFC 打卡回调加 isAdded/view 安全检查,防止 Fragment 销毁后崩溃 2. postDelayed 回调同样加保护 3. 绑定二维码电量从写死100改为读取实时电量 4. 信号强度启动时主动读一次初始值(和蓝牙同样处理) Co-Authored-By: Claude Opus 4.6 (1M context) --- .../java/com/xiaoqu/watch/ui/bind/BindFragment.kt | 12 +++++++++++- .../java/com/xiaoqu/watch/ui/home/HomeFragment.kt | 11 +++++++++++ .../com/xiaoqu/watch/ui/task/TaskListFragment.kt | 8 ++++++-- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/xiaoqu/watch/ui/bind/BindFragment.kt b/app/src/main/java/com/xiaoqu/watch/ui/bind/BindFragment.kt index bc124b4..062df39 100644 --- a/app/src/main/java/com/xiaoqu/watch/ui/bind/BindFragment.kt +++ b/app/src/main/java/com/xiaoqu/watch/ui/bind/BindFragment.kt @@ -60,13 +60,23 @@ class BindFragment : BaseFragment() { * 编码设备信息 JSON:{bluetoothName, imei, serial, power} * 与旧版 codeScanPair.vue 格式一致 */ + /** 获取当前电量百分比 */ + private fun getCurrentBatteryLevel(): Int { + val intent = requireContext().registerReceiver( + null, android.content.IntentFilter(android.content.Intent.ACTION_BATTERY_CHANGED) + ) ?: return 100 + val level = intent.getIntExtra(android.os.BatteryManager.EXTRA_LEVEL, 0) + val scale = intent.getIntExtra(android.os.BatteryManager.EXTRA_SCALE, 100) + return (level * 100) / scale + } + private fun generateQrCode() { try { val qrData = gson.toJson(mapOf( "bluetoothName" to devicePrefs.bluetoothName, "imei" to devicePrefs.imei, "serial" to devicePrefs.serial, - "power" to 100 // TODO: 接入实时电量 + "power" to getCurrentBatteryLevel() )) Timber.d("绑定: QR 数据=$qrData") diff --git a/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt b/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt index 3a02ca5..9f11c71 100644 --- a/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/xiaoqu/watch/ui/home/HomeFragment.kt @@ -328,6 +328,17 @@ class HomeFragment : BaseFragment() { val btAdapter = android.bluetooth.BluetoothAdapter.getDefaultAdapter() val btOn = btAdapter?.isEnabled ?: false statusBar.updateBluetooth(btOn) + + // 信号强度初始值(PhoneStateListener 注册后才有回调,先读一次当前值) + try { + val telephony = requireContext().getSystemService(android.content.Context.TELEPHONY_SERVICE) + as? android.telephony.TelephonyManager + val signalLevel = telephony?.signalStrength?.level ?: 0 + statusBar.updateSignal(signalLevel) + } catch (e: Exception) { + // signalStrength 可能为 null(API 28+),静默处理 + statusBar.updateSignal(0) + } } /** 初始化主页数据 */ diff --git a/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt b/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt index 487dd8d..e5a1ccc 100644 --- a/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt +++ b/app/src/main/java/com/xiaoqu/watch/ui/task/TaskListFragment.kt @@ -820,7 +820,9 @@ class TaskListFragment : BaseFragment() { btn.setBackgroundResource(R.drawable.bg_foot_btn_grey) nfcTaskManager.startTaskPunch(taskId) { success, message -> - // 恢复按钮可点击状态 + // NFC 回调可能在 Fragment 销毁后触发,需要安全检查 + if (!isAdded || view == null) return@startTaskPunch + btn.isEnabled = true if (success) { tipDialog.show( @@ -828,7 +830,9 @@ class TaskListFragment : BaseFragment() { title = "打卡成功" ) // 2 秒后(弹窗消失后)刷新任务详情 - btn.postDelayed({ fetchCurrentDetail() }, 2100) + btn.postDelayed({ + if (isAdded && view != null) fetchCurrentDetail() + }, 2100) } else { if (message != "超时") { tipDialog.show(