越狱ios中的USB检测

时间:2012-08-20 15:06:14

标签: objective-c ios usb daemon jailbreak

我正在尝试在越狱ios设备上开发守护进程,我正在寻找一种方法来检测设备是否为usb。有没有任何plist或其他任何我可以监视以检查USB?如果没有,有没有办法用4.3 sdk在ios设备上编译GCC应用程序?

1 个答案:

答案 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