2012-02-15 30 views
5

C'è un modo per sapere quando il mio dispositivo (iPhone) è collegato alla fonte di alimentazione, come un computer o sistemi audio per auto con una porta USB? Uso i servizi di localizzazione nella mia app e voglio passare automaticamente a kCLLocationAccuracyBestForNavigation quando il dispositivo è collegato. Grazie ...Come sapere quando il dispositivo iOS è collegato?

risposta

3

È possibile registrarsi per ricevere una notifica quando un accessorio si collega o si disconnette.

Esempio:

[[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 volta ricevuta questa notifica è possibile utilizzare un ciclo for per passare attraverso ogni accessorio come:

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

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

Ad un certo punto (dealloc forse) vi verrà voglia di annullare la registrazione per queste notifiche. È possibile farlo come:

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

** Thanks a lot ** io TES t questo codice ... – human4

+0

@ human4 Sempre felice di aiutare. Se KVO su 'UIDevice' è' batteryState' funziona allora è quello che vorrei andare con. – Sam

+0

Questo non funziona più. –

7

È possibile attivare il monitoraggio della batteria attraverso il UIDevice class e controllare lo stato della batteria per vedere se è in carica:

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

ti consigliamo di verificare la presenza di ricarica o Completo prima di abilitare la migliore precisione GPS.

+1

+1 Fare KVO sulla proprietà 'BatteryState' di' UIDevice' sembra il modo migliore per fare quello che l'OP vuole fare. – Sam

+0

** Grazie mille ** Verificherò questo codice ... – human4

2

Per controllare lo stato della batteria:

UIDeviceBatteryState batteryState = [[UIDevice currentDevice] batteryState]; 

Per iscriversi alla notifica di cambiamenti di stato della batteria, per esempio ottenendo una chiamata al proprio metodo di azione batteryStateChanged:

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

Ricordate di annullare l'iscrizione quando l'oggetto è dealloced:

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