ios - 检查电池充电状态是否实时变化 Swift
问题描述
我想检查我的 iphone 是否正在充电以及百分比。当我启动应用程序时,我能够获得百分比并知道它是否插入,但是当我拔下充电器时,我无法让它改变状态。本质上,我希望能够插入和拔出手机,并将我的Charge.text
字段状态从“充电”更改为“拔出”,反之亦然。
我实现了一个警告框,但它也只在我启动应用程序时弹出。我在那里得到了核心位置,因为我有一个关于实现位置反馈的想法,但它现在没有使用,请忽略它。
在搜索论坛时,我似乎只得到关于如何检查一次的答案,而不是持续更新。我不知道“实时”描述是否有帮助,但我真的不知道如何描述它。请帮忙 :)
import UIKit
import CoreLocation
import Alamofire
import SwiftyJSON
class ViewController: UIViewController, CLLocationManagerDelegate {
@IBOutlet weak var Charge: UILabel!
@IBOutlet weak var resultsField: UILabel!
var chargingVar = ""
var batteryLevel: Float {
return UIDevice.current.batteryLevel
}
func batteryStatus() {
UIDevice.current.isBatteryMonitoringEnabled = true
batteryStateChanged()
switch UIDevice.current.batteryState {
case .unknown:
self.Charge.text = "BATTERY: UNKNOWN!"
case .charging:
self.Charge.text = "Charging..."
case .full:
self.Charge.text = "BATTERY full"
case .unplugged:
self.Charge.text = "unplugged"
default:
self.Charge.text = "nope"
}
}
func batteryStateChanged(){
if (UIDevice.current.batteryState == .charging) { UIApplication.shared.isIdleTimerDisabled = true
self.chargingVar = "is charging. \u{1F603}"
chargingAlaer()
}else{
self.chargingVar = "is not charging. \u{1F622} "
chargingAlaer()
}
}
func chargingAlaer(){
let alertController = UIAlertController(title: "Charging Status",
message: "Your device \(chargingVar)",
preferredStyle: UIAlertController.Style.alert)
let ok = UIAlertAction(title: "OK",
style: UIAlertAction.Style.default,
handler: {(action) -> Void in
})
alertController.addAction(ok)
self.present(alertController, animated: true, completion: nil)
}
@objc func displayBatteryCharge() {
self.resultsField.text = "\(batteryLevel * 100)%"
}
override func viewDidLoad() {
super.viewDidLoad()
UIDevice.current.isBatteryMonitoringEnabled = true
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func viewDidAppear(_ animated: Bool) {
displayBatteryCharge()
batteryStatus()
}
}
解决方案
基本上你做了所有事情来显示当前状态,现在你需要添加一些被通知的东西,或者定期检查所说的状态。在这种情况下,我认为最好的方法是注册batteryStateDidChangeNotification
通知,只有在isBatteryMonitoringEnabled
设置为 true 时系统才会发送通知,就像您在viewDidLoad
我认为添加
NotificationCenter.default.addObserver(
self,
selector: #selector(batteryStatus),
name: UIDevice.batteryStateDidChangeNotification,
object: nil
)
应该做的伎俩。例如viewDidLoad
。
推荐阅读
- excel - ActiveX 组件无法创建对象,使用 .dll/.tlb 时
- javascript - 如何更改类指定的 h2 标记中的硬编码文本?
- android - 缺少类:com.google.android.aidl.BaseProxy
- python - 如何在使用 pandas 读取 excel 文件时克服 u200d unicode
- javascript - ASP.Net Core 3 将 JSON 数组发布到控制器
- ios - 如何在 iOS 中检测已配对的蓝牙设备唤醒并连接?
- python - 在对象列表中选择具有最大属性的对象
- angular - 将 Angular http 帖子拆分为多个调用
- javascript - Parse 服务器中没有这样的文件或目录 - 云代码
- python - 您必须使用 dtype int32 为占位符张量“Placeholder”提供一个值