如何知道 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 在UIDevice
的batteryState
属性上执行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 总是乐于提供帮助。如果UIDevice
的 batteryState
上的 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 设备何时插入?的主要内容,如果未能解决你的问题,请参考以下文章
如何检测用户何时在 android 设备上插入耳机? (与 ACTION_AUDIO_BECOMING_NOISY 相反)