Darwin notificationsを使用して、イベントをリッスンできます。100% 確信があるわけではありませんが、ジェイルブレイクされた iOS 5.0.1 iPhone 4 で実行しているように見えますが、これらのイベントのいずれかが必要になる可能性があります。
com.apple.iokit.hid.displayStatus
com.apple.springboard.hasBlankedScreen
com.apple.springboard.lockstate
更新:また、次の通知は、電話がロックされたときに投稿されます (ただし、ロックが解除されたときではありません)。
com.apple.springboard.lockcomplete
これを使用するには、次のようにイベントに登録します (これは 1 つのイベントのみに登録されますが、うまくいかない場合は他のイベントを試してください)。
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), //center
NULL, // observer
displayStatusChanged, // callback
CFSTR("com.apple.iokit.hid.displayStatus"), // event name
NULL, // object
CFNotificationSuspensionBehaviorDeliverImmediately);
displayStatusChanged
イベントコールバックはどこにありますか:
static void displayStatusChanged(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) {
NSLog(@"event received!");
// you might try inspecting the `userInfo` dictionary, to see
// if it contains any useful info
if (userInfo != nil) {
CFShow(userInfo);
}
}
このコードをサービスとしてバックグラウンドで実行する必要があり、脱獄している場合は、 iOS Launch Daemonsを調べることをお勧めします。単純にバックグラウンドで実行するアプリとは対照的に、起動デーモンは再起動後に自動的に開始でき、バックグラウンドでタスクを実行するアプリの iOS ルールについて心配する必要はありません。
これがどのように機能するか教えてください!