2012-02-15 42 views
5

Có cách nào để biết khi nào thiết bị của tôi (iPhone) được cắm vào nguồn điện, như máy tính hoặc hệ thống âm thanh xe hơi có cổng USB không? Tôi sử dụng dịch vụ bản địa hóa trong ứng dụng của mình và tôi muốn tự động thay đổi thành kCLLocationAccuracyBestForNavigation khi thiết bị được cắm. Thanks ...Làm thế nào để biết khi nào thiết bị iOS được cắm vào?

Trả lời

3

Bạn có thể đăng ký để được thông báo khi phụ kiện kết nối hoặc ngắt kết nối.

Ví dụ:

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

Khi bạn nhận được thông báo này, bạn có thể sử dụng một vòng lặp for để đi qua từng phụ kiện như:

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

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

Tại một số điểm (dealloc có lẽ), bạn sẽ muốn hủy đăng ký cho các thông báo này. Bạn có thể làm điều này như:

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

** Cảm ơn rất nhiều ** Tôi sẽ nói mã này ... – human4

+0

@ human4 Luôn sẵn lòng trợ giúp. Nếu KVO trên 'batteryState' của' UIDevice' hoạt động thì đó là điều tôi sẽ làm. – Sam

+0

Điều này không còn hoạt động nữa. –

7

Bạn có thể bật giám sát pin thông qua các UIDevice class và kiểm tra trạng thái pin để xem nếu nó đang được sạc:

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

Bạn sẽ muốn kiểm tra cho sạc hoặc Đầy đủ trước khi cho phép độ chính xác GPS tốt nhất.

+1

+1 Thực hiện KVO trên thuộc tính 'batteryState' của' UIDevice' có vẻ như là cách tốt nhất để thực hiện những gì OP muốn làm. – Sam

+0

** Cảm ơn rất nhiều ** Tôi sẽ kiểm tra mã này ... – human4

2

Để kiểm tra tình trạng pin:

UIDeviceBatteryState batteryState = [[UIDevice currentDevice] batteryState]; 

Để đăng ký thông báo về những thay đổi trong tình trạng pin, ví dụ bằng cách nhận một cuộc gọi đến phương pháp hành động của riêng bạn batteryStateChanged:

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

Hãy nhớ hủy đăng ký khi đối tượng của bạn được dealloced:

- (void) dealloc 
{ 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    [[UIDevice currentDevice] setBatteryMonitoringEnabled:NO]; 
} 
Các vấn đề liên quan