Computer >> 컴퓨터 >  >> 프로그래밍 >> iOS

iOS에서 배터리 상태(충전, 방전, 잔량)를 확인하는 방법 완벽 가이드

이번 포스트에서는 iOS 앱에서 배터리 상태와 잔량을 실시간으로 가져오는 방법을 단계별로 알아보겠습니다. UIDevice 클래스가 제공하는 배터리 모니터링 기능을 활용하면 충전 중인지, 방전 중인지, 배터리가 가득 찼는지 등의 정보를 손쉽게 얻을 수 있습니다.

프로젝트 준비하기

1단계 – Xcode를 실행하고 New Project → Single View Application을 선택한 후, 프로젝트 이름을 "BatteryState"로 지정합니다.

2단계 – Main.storyboard 파일을 열고 아래 이미지와 같이 레이블(Label) 두 개를 추가합니다. 이 레이블에 배터리 상태와 잔량을 표시하게 됩니다.

iOS에서 배터리 상태(충전, 방전, 잔량)를 확인하는 방법 완벽 가이드

배터리 모니터링 활성화

3단계 – iOS에서 배터리 정보를 받아오려면 먼저 배터리 모니터링 기능을 활성화해야 합니다. 다음 코드를 ViewController의 viewDidLoad에 추가하세요.

UIDevice.current.isBatteryMonitoringEnabled = true

이 속성이 true로 설정되지 않으면 batteryStatebatteryLevel은 항상 기본값만 반환하므로 반드시 먼저 활성화해야 합니다.

배터리 상태 변수 선언

4단계 – 현재 배터리 상태를 담을 연산 프로퍼티를 선언합니다. 이 변수는 UIDevice.current.batteryState 값을 반환하여 충전, 방전, 가득 참, 알 수 없음 등의 상태를 제공합니다.

var batteryState: UIDevice.BatteryState {
    return UIDevice.current.batteryState
}

배터리 변화 감지 옵저버 등록

5단계 – 배터리 상태나 잔량이 변경될 때마다 iOS가 발송하는 알림(Notification)을 받기 위해 옵저버를 등록해야 합니다. viewDidLoad에 아래 코드를 추가하세요.

NotificationCenter.default.addObserver(self, selector: #selector(batteryLevelDidChange), name: UIDevice.batteryLevelDidChangeNotification, object: nil)

옵저버가 등록되면 배터리 잔량이 변경될 때마다 batteryLevelDidChange 메서드가 자동으로 호출됩니다.

배터리 상태 업데이트 처리

6단계batteryLevelDidChange 메서드에서 배터리 변화를 처리하고, 레이블을 갱신하는 함수를 정의합니다.

@objc func batteryLevelDidChange() {
    updateBatteryStateLabel()
}

func updateBatteryStateLabel() {
    var status = "Unknown"
    switch batteryState {
        case .charging:
        status = "Charging"
        case .unknown:
        status = "Unknown"
        case .unplugged:
        status = "Unplugged"
        case .full:
        status = "Full"
    }
    DispatchQueue.main.async {
        self.batteryStateLabel.text = "Battery State: \(status)"
    }
}

여기서 updateBatteryStateLabel 함수는 레이블의 텍스트를 현재 배터리 상태에 맞게 갱신하는 역할을 합니다. 이 함수는 옵저버 메서드인 batteryLevelDidChange에서 호출되며, UI 갱신은 반드시 메인 스레드에서 이루어져야 하므로 DispatchQueue.main.async를 사용했습니다.

앱이 처음 실행될 때도 초기 배터리 상태가 화면에 표시되도록 viewDidLoad에서 이 함수를 한 번 호출해 주어야 합니다. 모든 코드를 적용한 최종 viewDidLoad는 다음과 같습니다.

override func viewDidLoad() {
    super.viewDidLoad()
    UIDevice.current.isBatteryMonitoringEnabled = true
    NotificationCenter.default.addObserver(self, selector: #selector(batteryLevelDidChange), name: UIDevice.batteryLevelDidChangeNotification, object: nil)
    updateBatteryStateLabel()
}

실행 결과 확인하기

코드 작성이 끝났으면 실제 디바이스에서 앱을 실행해 보세요. 시뮬레이터가 아닌 실제 기기에서 테스트해야 정확한 배터리 정보를 확인할 수 있습니다. 충전기를 연결하거나 분리하는 등 배터리 상태를 변경하면 아래 사진과 같이 화면에 표시되는 상태가 실시간으로 바뀌는 것을 볼 수 있습니다.

iOS에서 배터리 상태(충전, 방전, 잔량)를 확인하는 방법 완벽 가이드

마무리

이렇게 isBatteryMonitoringEnabled 속성과 batteryLevelDidChangeNotification 알림만 활용하면 별도의 외부 라이브러리 없이 iOS에서 배터리 상태와 잔량 변화를 손쉽게 추적할 수 있습니다. 배터리 잔량 백분율까지 함께 표시하고 싶다면 UIDevice.current.batteryLevel 값(0.0~1.0)을 활용하면 됩니다. 저전력 모드 감지가 필요하다면 ProcessInfo.processInfo.isLowPowerModeEnabledNSProcessInfoPowerStateDidChange 알림을 추가로 활용해 보세요.