Как узнать, когда устройство iOS подключено? - PullRequest
5 голосов
/ 16 февраля 2012

Есть ли способ узнать, когда мое устройство (iPhone) подключено к источнику питания, например компьютер или автомобильная аудиосистема с портом USB? Я использую службы локализации в своем приложении, и я хочу изменить на kCLLocationAccuracyBestForNavigation автоматически, когда устройство подключено. Спасибо ...

Ответы [ 3 ]

7 голосов
/ 16 февраля 2012

Вы можете включить мониторинг батареи через UIDevice класс и проверить состояние батареи, чтобы увидеть, заряжается ли она:

typedef enum {
    UIDeviceBatteryStateUnknown,
    UIDeviceBatteryStateUnplugged,
    UIDeviceBatteryStateCharging,
    UIDeviceBatteryStateFull,
} UIDeviceBatteryState;

Перед включением наилучшей точности GPS вы должны проверить уровень заряда или полный.

3 голосов
/ 09 мая 2014

Чтобы проверить состояние батареи:

UIDeviceBatteryState batteryState = [[UIDevice currentDevice] batteryState];

Чтобы подписаться на уведомления об изменениях состояния батареи, например, позвонив своему собственному методу действия batteryStateChanged:

- (void) setup {
  [[UIDevice currentDevice] setBatteryMonitoringEnabled:YES];
  NSNotificationCenter * center= [NSNotificationCenter defaultCenter];
  [center addObserver:self
             selector:@selector(batteryStateChanged)
                 name:UIDeviceBatteryStateDidChangeNotification
               object:nil];
}

Не забудьте отписаться, когда ваш объект освобожден:

- (void) dealloc
{
   [[NSNotificationCenter defaultCenter] removeObserver:self];
   [[UIDevice currentDevice] setBatteryMonitoringEnabled:NO];
}
3 голосов
/ 16 февраля 2012

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

Пример:

[[EAAccessoryManager sharedAccessoryManager] registerForLocalNotifications];
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter addObserver:self
                       selector:@selector(accessoryDidConnect:)
                           name:EAAccessoryDidConnectNotification
                         object:nil];
[notificationCenter addObserver:self
                       selector:@selector(accessoryDidDisconnect:)
                           name:EAAccessoryDidDisconnectNotification
                         object:nil];

Как только вы получите это уведомление, вы можете использовать цикл for для прохождения через каждый аксессуар, например:

NSArray *accessories = [[EAAccessoryManager sharedAccessoryManager] connectedAccessories]; 
EAAccessory *accessory = nil; 

for (EAAccessory *obj in accessories)
{ 
    // See if you're interested in this particular accessory
}

В какой-то момент (возможно, dealloc) вы захотите отменить регистрацию для этих уведомлений. Вы можете сделать это следующим образом:

NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter removeObserver:self 
                              name:EAAccessoryDidDisconnectNotification 
                            object:nil];
[notificationCenter removeObserver:self 
                              name:EAAccessoryDidConnectNotification 
                            object:nil];
[[EAAccessoryManager sharedAccessoryManager] unregisterForLocalNotifications];  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...