首页 > 解决方案 > 检查电池充电状态是否实时变化 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()
    }
    


            


}

标签: iosswiftbatterylevel

解决方案


基本上你做了所有事情来显示当前状态,现在你需要添加一些被通知的东西,或者定期检查所说的状态。在这种情况下,我认为最好的方法是注册batteryStateDidChangeNotification通知,只有在isBatteryMonitoringEnabled设置为 true 时系统才会发送通知,就像您在viewDidLoad

我认为添加

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

应该做的伎俩。例如viewDidLoad


推荐阅读