如何使用swift

时间:2015-07-13 19:01:43

标签: ios swift

所以,我正在试图弄清楚如何监控iOS设备中的电池电量和状态变化。

到目前为止,我已经确定了如何获得当前的电池电量,但无法弄清楚如何获取状态或如何监控任何更改,因此我可以弹出对话框(或通知,但我认为我可以'无论如何都要在后台监听这个......)100%充电时。

这是我到目前为止所做的:

@IBOutlet var BatteryLevelLabel: UILabel!
@IBOutlet var BatteryStateLabel: UILabel!

// function to return the devices battery level
    func batteryLevel()-> Float {
        return UIDevice.currentDevice().batteryLevel
    }

// function to return the devices battery state (Unknown, Unplugged, Charging, or Full)
    func batteryState()-> UIDeviceBatteryState {
        return UIDevice.currentDevice().batteryState
    }

override func viewDidLoad() {
        super.viewDidLoad()

         let currentBatteryLevel = batteryLevel()

        // enables the tracking of the devices battery level
        UIDevice.currentDevice().batteryMonitoringEnabled = true

        // shows the battery level on labels
        BatteryLevelLabel.text = "\(batteryLevel() * 100)%)"
        BatteryStateLabel.text = "\(batteryState())"
        print("Device Battery Level is: \(batteryLevel()) and the state is \(batteryState())")

// shows alert when battery is 100% (1.0)
        if currentBatteryLevel == 1.0{
            let chargedAlert = UIAlertController(title: "Battery Charged", message: "Your battery is 100% charged.", preferredStyle: UIAlertControllerStyle.Alert)

            chargedAlert.addAction(UIAlertAction(title: "Ok", style: .Default, handler: { (action: UIAlertAction!) in
                print("Handle Ok logic here")
            }))
            presentViewController(chargedAlert, animated: true, completion: nil)
        }

    }

非常感谢任何帮助!谢谢!

3 个答案:

答案 0 :(得分:13)

您可以使用电池状态通知UIDeviceBatteryStateDidChangeNotificationUIDeviceBatteryLevelDidChangeNotification在状态发生变化时收到通知:

override func viewDidLoad() {
    super.viewDidLoad()
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "batteryStateDidChange:", name: UIDeviceBatteryStateDidChangeNotification, object: nil)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "batteryLevelDidChange:", name: UIDeviceBatteryLevelDidChangeNotification, object: nil)   

    // Stuff...
}

func batteryStateDidChange(notification: NSNotification){     
    // The stage did change: plugged, unplugged, full charge...
}

func batteryLevelDidChange(notification: NSNotification){     
   // The battery's level did change (98%, 99%, ...)
}

答案 1 :(得分:5)

这是实现为Swift 3.0建议的代码@tbaranes的新方法

NotificationCenter.default.addObserver(self, selector: Selector(("batteryStateDidChange:")), name: NSNotification.Name.UIDeviceBatteryStateDidChange, object: nil)
NotificationCenter.default.addObserver(self, selector: Selector(("batteryLevelDidChange:")), name: NSNotification.Name.UIDeviceBatteryLevelDidChange, object: nil)

答案 2 :(得分:0)

UIDevice class现在有了新的方法:

  

获取设备电池状态

var batteryLevel: Float
     

设备的电池电量。

var isBatteryMonitoringEnabled: Bool
     

一个布尔值,指示是否启用电池监控   (true)与否(false)。

var batteryState: UIDeviceBatteryState
     

设备的电池状态。

UIDeviceBatteryState具有以下值:

case unknown
     

无法确定设备的电池状态。

case unplugged
     

设备未插入电源;电池正在放电。

case charging
     

设备已接通电源且电池电量低于100%   充电。

case full
     

设备已接通电源,电池100%充电。