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