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




