2012-02-15 2 views
5

Y a-t-il un moyen de savoir quand mon appareil (iPhone) est branché à la source d'alimentation, comme un ordinateur ou un système audio de voiture avec un port USB? J'utilise les services de localisation dans mon application et je souhaite passer automatiquement au kCLLocationAccuracyBestForNavigation lorsque l'appareil est branché. Merci ...Comment savoir quand un appareil iOS est branché?

Répondre

3

Vous pouvez vous inscrire pour être averti lorsqu'un accessoire se connecte ou se déconnecte.

Exemple:

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

Une fois que vous recevez cette notification, vous pouvez utiliser une boucle pour passer par chaque accessoire comme:

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

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

À un certain moment (dealloc peut-être) vous voulez désenregistrer pour ces notifications. Vous pouvez le faire comme:

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

** Merci beaucoup ** Je vais t ce code ... – human4

+0

@ human4 Toujours heureux de vous aider. Si KVO sur 'batteryState' de' UIDevice' fonctionne, alors c'est ce que je ferais avec. – Sam

+0

Cela ne fonctionne plus. –

7

Vous pouvez activer la surveillance de la batterie à travers le UIDevice class et vérifier l'état de la batterie pour voir si elle est en charge:

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

Vous voulez vérifier pour charger ou Plein avant d'activer la meilleure précision GPS.

+1

+1 Faire du KVO sur la propriété 'batteryState' de' UIDevice' semble être la meilleure façon de faire ce que l'OP veut faire. – Sam

+0

** Merci beaucoup ** Je vais tester ce code ... – human4

2

Pour vérifier l'état de la batterie:

UIDeviceBatteryState batteryState = [[UIDevice currentDevice] batteryState]; 

Pour vous abonner aux notifications sur les changements dans l'état de la batterie, par exemple en obtenant un appel à votre propre méthode d'action batteryStateChanged:

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

N'oubliez pas de vous désabonner lorsque votre objet est libéré:

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