2012-02-15 26 views
5

¿Hay alguna manera de saber cuándo mi dispositivo (iPhone) está enchufado a la fuente de alimentación, como una computadora o sistemas de audio para automóvil con un puerto USB? Utilizo servicios de localización en mi aplicación y deseo cambiar al kCLLocationAccuracyBestForNavigation automáticamente cuando el dispositivo está enchufado. Gracias ...¿Cómo saber cuándo el dispositivo iOS está enchufado?

Respuesta

3

Puede registrarse para recibir notificaciones cuando un accesorio se conecta o desconecta.

Ejemplo:

[[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]; 

Una vez que reciba esta notificación puede utilizar un bucle para pasar por cada accesorio como:

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

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

En algún momento (dealloc tal vez) que va a querer anular el registro para estas notificaciones Esto se puede hacer como:

NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 
[notificationCenter removeObserver:self 
           name:EAAccessoryDidDisconnectNotification 
          object:nil]; 
[notificationCenter removeObserver:self 
           name:EAAccessoryDidConnectNotification 
          object:nil]; 
[[EAAccessoryManager sharedAccessoryManager] unregisterForLocalNotifications]; 
+0

** Muchas gracias ** Voy a probar t este código ... – human4

+0

@ human4 Siempre me complace ayudarlo. Si KVO en 'UETevice'' batteryState' funciona, entonces eso es lo que haría. – Sam

+0

Esto ya no funciona. –

7

Puede habilitar la supervisión de la batería a través de la UIDevice class y comprobar el estado de la batería para ver si se está cargando:

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

que querrá comprobar la carga o Completo antes de permitir la mejor precisión de GPS.

+1

+1 Hacer KVO en la propiedad 'batteryState' de' UIDevice' parece ser el mejor camino a seguir para lo que OP quiere hacer. – Sam

+0

** Muchas gracias ** Voy a probar este código ... – human4

2

Para comprobar el estado de la batería:

UIDeviceBatteryState batteryState = [[UIDevice currentDevice] batteryState]; 

para suscribirse a notificaciones sobre los cambios en el estado de la batería, por ejemplo, por haber recibido una llamada a su propio método de acción batteryStateChanged:

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

Recuerde darse de baja cuando su objeto se desasigna:

- (void) dealloc 
{ 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    [[UIDevice currentDevice] setBatteryMonitoringEnabled:NO]; 
} 
Cuestiones relacionadas