2013년 11월 18일 월요일

[iOS] 배터리 상태 감시

배터리는 UIDevice의 batteryMonitoringEnabled에 YES를 설정하고, 알림 설정을 변경 사항을 받을 수 있다.

1. 배터리 모니터링 시작하기.

Source Code
    [[UIDevice currentDevice] setBatteryMonitoringEnabled:YES];

배터리는 상태(batteryState) 의 변경사항으로 아래 4가지 상태 값을 가진다.

typedef enum {
   UIDeviceBatteryStateUnknown,
   UIDeviceBatteryStateUnplugged,
   UIDeviceBatteryStateCharging,
   UIDeviceBatteryStateFull,
} UIDeviceBatteryState;
  • 알수 없는 상태 (Unknown) : Enabled 가 되어 있지 않는 상태
  • 전원에 연결되어 있지 않는 상태 (not plugged)
  • 충전 중인 상태 (charging)
  • 완전 충전 상태 (full)
배터리의 레벨(batteryLevel) 은 0.0~ 1.0 사이의 값을 가진다.

2. 배터리 Level과 State변경 될 때, Notification받기

알림 추가를 아래와 같이 하여서, 특정 변경이 되면 특정 블록을 실행하게 한다.

source code
        [[NSNotificationCenter defaultCenter] addObserverForName:UIDeviceBatteryStateDidChangeNotification
                                                          object:Nil
                                                           queue:[NSOperationQueue mainQueue]
                                                      usingBlock:^(NSNotification *note) {
                                                          NSLog(@"Battery State Change");
                                                          //Show Battery State
                                                      }];
        [[NSNotificationCenter defaultCenter] addObserverForName:UIDeviceBatteryLevelDidChangeNotification
                                                          object:nil
                                                           queue:[NSOperationQueue mainQueue]
                                                      usingBlock:^(NSNotification *note) {
                                                          NSLog(@"Battery Level Change");
                                                          //Show Battery Level
                                                      }];

3. 정보 읽어 오기

배터리의 state와 level은 아래와 같이 읽어 올 수 있다.

source code
    [UIDevice currentDevice].batteryState;
    [UIDevice currentDevice].batteryLevel; // 0.0f - 1.0f


4. 그럼, 이것을 어디에서 사용할 수 있는가?

특정 연산을 시작하거나, 데이터를 업로드할 때, 전원이 연결되어 있는지, level이 특정 이상인지를 체크해서 사용자에게 연결하거나, 업로드를 못하도록 할 수 있다.

사용자들이 전원이 없는 상태에서 무리하게 실행하는 것을 막을 수 있는 것이다.