1

現在、ジェイルブレイク iOS デバイスでデーモンを開発しようとしています。デバイスが USB であることを検出する方法を探しています。USBをチェックするために監視できるplistやその他のものはありますか? そうでない場合、iOS デバイスで 4.3 SDK を使用して GCC アプリをコンパイルする方法はありますか?

4

1 に答える 1

1

実際には、パブリック API を使用してそれを行うことができます。スタック オーバーフローに関するこの回答を参照してください。

おそらく、バッテリーの状態がChargingまたはFullであることを確認する必要があることに注意してください。どちらもケーブルが差し込まれていることを意味します。

notificationWatcherまた、Cydia からユーティリティ ( Erica Utilitiesの一部)をダウンロードし、ジェイルブレイクされた iPhone (Wifi と SSH 経由で接続) で実行すると、USB ケーブルの接続/切断時にコンソールに次のように表示されます。

傍受された通知: com.apple.springboard.fullcharged

傍受された通知: com.apple.springboard.pluggedin

傍受された通知: com.apple.springboard.fullcharged

したがって、次の 2 つの方法のいずれかで通知に登録できると思います。

[[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 に答える