fix: 代码遗漏修复(NFC回调安全+绑定电量+信号初始值)
1. NFC 打卡回调加 isAdded/view 安全检查,防止 Fragment 销毁后崩溃 2. postDelayed 回调同样加保护 3. 绑定二维码电量从写死100改为读取实时电量 4. 信号强度启动时主动读一次初始值(和蓝牙同样处理) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -60,13 +60,23 @@ class BindFragment : BaseFragment<FragmentBindBinding>() {
|
||||
* 编码设备信息 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")
|
||||
|
||||
|
||||
@@ -328,6 +328,17 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化主页数据 */
|
||||
|
||||
@@ -820,7 +820,9 @@ class TaskListFragment : BaseFragment<FragmentTaskListBinding>() {
|
||||
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<FragmentTaskListBinding>() {
|
||||
title = "打卡成功"
|
||||
)
|
||||
// 2 秒后(弹窗消失后)刷新任务详情
|
||||
btn.postDelayed({ fetchCurrentDetail() }, 2100)
|
||||
btn.postDelayed({
|
||||
if (isAdded && view != null) fetchCurrentDetail()
|
||||
}, 2100)
|
||||
} else {
|
||||
if (message != "超时") {
|
||||
tipDialog.show(
|
||||
|
||||
Reference in New Issue
Block a user