实时查看电池充电状态是否变化Swift

Check if battery charging status changes in real time Swift

我想检查一下我的 iphone 是否在充电以及充电的百分比是多少。当我启动应用程序时,我能够获得百分比并知道它是否已插入,但是当我拔下充电器时我无法让它改变状态。本质上,我希望能够插入和拔出 phone 并让我的 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 中。