我正在尝试在越狱ios设备上开发守护进程,我正在寻找一种方法来检测设备是否为usb。有没有任何plist或其他任何我可以监视以检查USB?如果没有,有没有办法用4.3 sdk在ios设备上编译GCC应用程序?
答案 0 :(得分:1)
你实际上可以使用公共API来做到这一点。请参阅this answer on stack overflow。
请注意,您可能需要检查电池状态是充电还是完整。两者都意味着电缆已插入。
此外,如果您从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
。