1

我目前正在尝试在越狱 ios 设备上开发守护程序,并且正在寻找一种方法来检测该设备是否连接到 USB。是否有任何 plist 或其他我可以监控来检查 USB 的东西?如果没有,有没有办法在 ios 设备上使用 4.3 sdk 编译 GCC 应用程序?

4

1 回答 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 回答