2012-02-15 14 views
5

Czy istnieje sposób sprawdzenia, czy moje urządzenie (iPhone) jest podłączone do źródła zasilania, na przykład komputera lub samochodowych systemów audio z portem USB? Korzystam z usług lokalizacyjnych w mojej aplikacji i chcę automatycznie zmienić na kCLLocationAccuracyBestForNavigation po podłączeniu urządzenia. Dzięki ...Jak sprawdzić, czy urządzenie iOS jest podłączone?

Odpowiedz

3

Możesz się zarejestrować, aby otrzymać powiadomienie, gdy akcesorium się połączy lub rozłączy.

Przykład:

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

Po otrzymaniu tego powiadomienia można użyć pętli for, aby przejść przez każdy akcesoriów takich jak:

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

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

W pewnym momencie (dealloc chyba), który będzie chciał wyrejestrować dla tych powiadomień. Można to zrobić tak:

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

** Wielkie dzięki ** Ja tes t ten kod ... – human4

+0

@ human4 Zawsze miło mi pomóc. Jeśli działa KVO na 'UIDevice'' batteryState', to jest to, co chciałbym zrobić. – Sam

+0

To już nie działa. –

7

można włączyć monitorowanie baterii thru UIDevice class i sprawdzić stan akumulatora, aby sprawdzić, czy jest ona pobierana:

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

będziemy chcieli, aby sprawdzić, czy ładowania Pełna przed włączeniem najlepszej dokładności GPS.

+1

+1 Robienie KVO na 'UIDevice'' 'batteryState' Właściwość wydaje się najlepszym sposobem, aby przejść do tego, co OP chce zrobić. – Sam

+0

** Wielkie dzięki ** Testuję ten kod ... – human4

2

Aby sprawdzić stan akumulatora:

UIDeviceBatteryState batteryState = [[UIDevice currentDevice] batteryState]; 

do subskrybowania powiadomień o zmianach w stanie baterii, na przykład przez uzyskanie połączenia do własnego sposobu działania batteryStateChanged:

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

Pamiętaj, aby zrezygnować z subskrypcji, gdy obiekt zostanie wycofany:

- (void) dealloc 
{ 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    [[UIDevice currentDevice] setBatteryMonitoringEnabled:NO]; 
} 
Powiązane problemy