我目前正在尝试在越狱 ios 设备上开发守护程序,并且正在寻找一种方法来检测该设备是否连接到 USB。是否有任何 plist 或其他我可以监控来检查 USB 的东西?如果没有,有没有办法在 ios 设备上使用 4.3 sdk 编译 GCC 应用程序?
问问题
1247 次
1 回答
1
您实际上可以使用公共 API 来做到这一点。请参阅有关堆栈溢出的此答案。
请注意,您可能需要检查电池状态是Charging还是Full。两者都意味着电缆已插入。
此外,如果您从 Cydia 下载notificationWatcher
实用程序(Erica Utilities的一部分),并在越狱的 iPhone(通过 Wifi 和 SSH 连接)上运行它,当您连接/断开 USB 电缆时,您将在控制台上看到:
截获通知:com.apple.springboard.fullycharged
截获通知:com.apple.springboard.pluggedin
截获通知:com.apple.springboard.fullycharged
因此,我猜您可以通过以下两种方式之一注册通知:
[[UIDevice currentDevice] setBatteryMonitoringEnabled: YES];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(batteryStatus)
name: UIDeviceBatteryStateDidChangeNotification
object: nil];
或者,使用 Core Foundation 通知:
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), //center
NULL, // observer
plugStatus, // callback
CFSTR("com.apple.springboard.pluggedin"), // name
NULL, // object
CFNotificationSuspensionBehaviorHold);
然后回调函数可以是:
- (void) batteryStatus {
UIAlertView* alert = [[UIAlertView alloc] initWithTitle: @"batteryStatus" message: @"battery" delegate: self cancelButtonTitle: @"Ok" otherButtonTitles: nil];
[alert show];
}
static void plugStatus(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) {
UIAlertView* alert = [[UIAlertView alloc] initWithTitle: @"plugStatus" message: @"plug" delegate: nil cancelButtonTitle: @"Ok" otherButtonTitles: nil];
[alert show];
if (userInfo != nil) {
CFShow(userInfo);
}
}
com.apple.springboard.pluggedin
在插入或拔出电缆时发送。
于 2012-08-21T21:37:36.173 回答