Определить, заряжается ли устройство - PullRequest
26 голосов
/ 08 мая 2009

Я не могу найти что-то определенное, используя мой любимый инструмент , однако я думал, что выложу это здесь ...

Есть ли способ, с помощью iPhone SDK, для приложения определить, находится ли устройство в состоянии приема питания (зарядка, док-станция и т. Д.)?

Я хотел бы иметь возможность автоматически отключать idleTimer, если устройство получает питание (в противном случае это пользовательская настройка).

Ответы [ 7 ]

42 голосов
/ 25 сентября 2010

Вам лучше использовать:

[[UIDevice currentDevice] setBatteryMonitoringEnabled:YES];

if ([[UIDevice currentDevice] batteryState] != UIDeviceBatteryStateUnplugged) {
      [UIApplication sharedApplication].idleTimerDisabled=YES;
    }

Это потому, что вы должны заботиться о себе два различных состояния - одно состоит в том, что аккумулятор заряжается , а другое, когда оно полностью заряжено .

Если бы вы действительно хотели быть полными об этом - вы бы зарегистрировались, чтобы получать уведомления о контроле заряда батареи, чтобы вы могли повторно включить таймер простоя, если пользователь отключил основное питание и т. Д.

34 голосов
/ 08 мая 2009

Да, UIDevice может сказать вам следующее:

[[UIDevice currentDevice] setBatteryMonitoringEnabled:YES];

if ([[UIDevice currentDevice] batteryState] == UIDeviceBatteryStateCharging) {
    NSLog(@"Device is charging.");
}

См. Справочник UIDevice в документации для получения дополнительной информации и других значений batteryState.

6 голосов
/ 10 марта 2016

Swift 4

UIDevice.current.isBatteryMonitoringEnabled = true

if (UIDevice.current.batteryState != .unplugged) {
    print("Device is charging.")
}

Swift 3

UIDevice.currentDevice().batteryMonitoringEnabled = true;

if (UIDevice.currentDevice().batteryState != .Unplugged) {
    print("Device is charging.");
}
5 голосов
/ 20 февраля 2017

Свифт 3:

UIDevice.current.isBatteryMonitoringEnabled = true
let state = UIDevice.current.batteryState

if state == .charging || state == .full {
    print("Device plugged in.")
}
1 голос
/ 20 февраля 2019

Swift 4,2

Значение Bool

    var batteryState: Bool {
        IDevice.current.isBatteryMonitoringEnabled = true
        let state = UIDevice.current.batteryState

        if state == .charging || state == .full {
            print("Device plugged in.")
            return true

        } else {
            return false
        }

    }
1 голос
/ 11 февраля 2016

Вы можете использовать Центр уведомлений Дарвина и использовать имя события com.apple.springboard.fullycharged .

Таким образом, вы получите уведомление для вашего пользовательского метода, вот фрагмент кода:

// Registering for a specific notification
NSString *notificationName = @"com.apple.springboard.fullycharged";
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(),
                                NULL,
                                yourCustomMethod,
                                (__bridge CFStringRef)notificationName,
                                NULL, 
                                CFNotificationSuspensionBehaviorDeliverImmediately);

// The custom method that will receive the notification
static void yourCustomMethod(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo)
{
  NSString *nameOfNotification = (__bridge NSString*)name;

  if([nameOfNotification isEqualToString:notificationName])
  {
    // Do whatever you want...
  }
} 
0 голосов
/ 15 марта 2019
func checkForCharging() {

UIDevice.current.isBatteryMonitoringEnabled = true

if UIDevice.current.batteryState != .unplugged {

print("Batery is charging")

} else if UIDevice.current.batteryState == .unplugged {

print("Check the cable")

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...