You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

iOS设备充电状态检测求助:拔下充电线时无法触发通知

解决iOS设备拔下充电线时的状态通知问题

嘿,你的问题我太懂了!你现在的代码只是单次检测当前的电池状态,只有当代码执行到那一行时才会判断一次,拔线这种状态变化自然不会触发回调。要实时捕捉充电线插拔的状态变化,咱们得用iOS的通知中心来订阅状态变更通知,具体步骤如下:

1. 开启电池状态监控

首先得打开电池状态监控开关——默认是关闭的,不开启的话收不到任何状态变更通知:

UIDevice.current.isBatteryMonitoringEnabled = true

你可以把这段代码放在viewDidLoad或者你的初始化逻辑里。

2. 注册电池状态变更通知

接下来注册UIDeviceBatteryStateDidChangeNotification通知,这样状态变化时系统会主动通知我们:

NotificationCenter.default.addObserver(
    self,
    selector: #selector(batteryStateDidChange),
    name: UIDevice.batteryStateDidChangeNotification,
    object: nil
)

3. 实现状态变更回调方法

写一个对应的回调方法,在这里处理充电线插拔后的逻辑,包括拔线对应的.unplugged状态:

@objc func batteryStateDidChange() {
    let currentState = UIDevice.current.batteryState
    
    switch currentState {
    case .charging:
        print("设备正在充电(插着充电线)")
    case .full:
        print("设备已充满电")
    case .unplugged:
        print("充电线已拔下!") // 这里就是你要的拔线通知逻辑
    case .unknown:
        print("无法识别电池状态")
    @unknown default:
        print("出现未定义的电池状态类型")
    }
}

4. 移除观察者(避免内存泄漏)

最后别忘了在对象销毁时移除通知观察者,比如在deinit方法里:

deinit {
    NotificationCenter.default.removeObserver(self)
}

这样改造后,不管是插充电线还是拔充电线,只要电池状态发生变化,batteryStateDidChange方法都会被自动调用,你就能在.unplugged的分支里处理拔线后的逻辑啦!

内容的提问来源于stack exchange,提问作者Rahul

火山引擎 最新活动