如何知道 iOS 设备何时插入?

Posted

技术标签:

【中文标题】如何知道 iOS 设备何时插入?【英文标题】:How to know when iOS device is plugged in? 【发布时间】:2012-02-15 20:20:34 【问题描述】:

有没有办法知道我的设备 (iPhone) 何时插入电源,例如带有 USB 端口的计算机或汽车音响系统?我在我的应用程序中使用本地化服务,我想在插入设备时自动更改为kCLLocationAccuracyBestForNavigation。谢谢...

【问题讨论】:

【参考方案1】:

您可以通过UIDevice class启用电池监控并检查电池状态以查看是否正在充电:

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

在启用最佳 GPS 精度之前,您需要检查正在充电或已充满。

【讨论】:

+1 在UIDevicebatteryState 属性上执行KVO 似乎是实现OP 想要做的最好的方式。【参考方案2】:

您可以注册以在配件连接或断开连接时收到通知。

例子:

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

收到此通知后,您可以使用 for 循环遍历每个附件,例如:

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

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

在某些时候(也许是 dealloc),您会想要取消注册这些通知。你可以这样做:

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

【讨论】:

@human4 总是乐于提供帮助。如果 UIDevicebatteryState 上的 KVO 有效,那么我会采用这种方式。【参考方案3】:

检查电池状态:

UIDeviceBatteryState batteryState = [[UIDevice currentDevice] batteryState];

订阅有关电池状态变化的通知,例如通过调用您自己的操作方法batteryStateChanged

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

记得在你的对象被释放时取消订阅:

- (void) dealloc

   [[NSNotificationCenter defaultCenter] removeObserver:self];
   [[UIDevice currentDevice] setBatteryMonitoringEnabled:NO];

【讨论】:

以上是关于如何知道 iOS 设备何时插入?的主要内容,如果未能解决你的问题,请参考以下文章

如何识别插入 USB 插槽的设备?

如何检测用户何时在 android 设备上插入耳机? (与 ACTION_AUDIO_BECOMING_NOISY 相反)

插入 iOS 设备时如何检查“调试视图层次结构”?

如何检测USB键盘是不是插入和拔出

我可以使用 win32 Setup API 来检测 USB 设备何时插入或拔出吗?

Bash 脚本检测我的 USB 何时插入,然后将其与目录同步