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}
|
* 编码设备信息 JSON:{bluetoothName, imei, serial, power}
|
||||||
* 与旧版 codeScanPair.vue 格式一致
|
* 与旧版 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() {
|
private fun generateQrCode() {
|
||||||
try {
|
try {
|
||||||
val qrData = gson.toJson(mapOf(
|
val qrData = gson.toJson(mapOf(
|
||||||
"bluetoothName" to devicePrefs.bluetoothName,
|
"bluetoothName" to devicePrefs.bluetoothName,
|
||||||
"imei" to devicePrefs.imei,
|
"imei" to devicePrefs.imei,
|
||||||
"serial" to devicePrefs.serial,
|
"serial" to devicePrefs.serial,
|
||||||
"power" to 100 // TODO: 接入实时电量
|
"power" to getCurrentBatteryLevel()
|
||||||
))
|
))
|
||||||
Timber.d("绑定: QR 数据=$qrData")
|
Timber.d("绑定: QR 数据=$qrData")
|
||||||
|
|
||||||
|
|||||||
@@ -328,6 +328,17 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
|
|||||||
val btAdapter = android.bluetooth.BluetoothAdapter.getDefaultAdapter()
|
val btAdapter = android.bluetooth.BluetoothAdapter.getDefaultAdapter()
|
||||||
val btOn = btAdapter?.isEnabled ?: false
|
val btOn = btAdapter?.isEnabled ?: false
|
||||||
statusBar.updateBluetooth(btOn)
|
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)
|
btn.setBackgroundResource(R.drawable.bg_foot_btn_grey)
|
||||||
|
|
||||||
nfcTaskManager.startTaskPunch(taskId) { success, message ->
|
nfcTaskManager.startTaskPunch(taskId) { success, message ->
|
||||||
// 恢复按钮可点击状态
|
// NFC 回调可能在 Fragment 销毁后触发,需要安全检查
|
||||||
|
if (!isAdded || view == null) return@startTaskPunch
|
||||||
|
|
||||||
btn.isEnabled = true
|
btn.isEnabled = true
|
||||||
if (success) {
|
if (success) {
|
||||||
tipDialog.show(
|
tipDialog.show(
|
||||||
@@ -828,7 +830,9 @@ class TaskListFragment : BaseFragment<FragmentTaskListBinding>() {
|
|||||||
title = "打卡成功"
|
title = "打卡成功"
|
||||||
)
|
)
|
||||||
// 2 秒后(弹窗消失后)刷新任务详情
|
// 2 秒后(弹窗消失后)刷新任务详情
|
||||||
btn.postDelayed({ fetchCurrentDetail() }, 2100)
|
btn.postDelayed({
|
||||||
|
if (isAdded && view != null) fetchCurrentDetail()
|
||||||
|
}, 2100)
|
||||||
} else {
|
} else {
|
||||||
if (message != "超时") {
|
if (message != "超时") {
|
||||||
tipDialog.show(
|
tipDialog.show(
|
||||||
|
|||||||
Reference in New Issue
Block a user