【问题标题】:Check if battery charging status changes in real time Swift检查电池充电状态是否实时变化 Swift
【发布时间】:2020-07-21 23:30:48
【问题描述】:

我想检查我的 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()
    }
    


            


}

【问题讨论】:

    标签: ios swift batterylevel


    【解决方案1】:

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

    我想添加

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

    应该做的伎俩。以viewDidLoad 为例。

    【讨论】:

      猜你喜欢
      • 2012-07-21
      • 1970-01-01
      • 2016-02-14
      • 1970-01-01
      • 2018-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      相关资源
      最近更新 更多