10

バックグラウンドでサービスとして実行されるネットワーク監視アプリを開発しています。画面のオン/オフ時に通知/電話を受けることはできますか?

次のコードを使用して Android に存在します。

private void registerScreenOnOffReceiver()
{
   IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
   filter.addAction(Intent.ACTION_SCREEN_OFF);
   registerReceiver(screenOnOffReceiver, filter);
}

screenOnOffReceiver は、画面がオン/オフになったときに呼び出されます。iOS用の同様のソリューションはありますか?

編集: これまでに見つけた最高のものは UIApplicationProtectedDataWillBecomeUnavailable ( Detect if iPhone screen is on/off ) ですが、ユーザーはデバイスでデータ保護 (パスワード保護) を有効にする必要があります。

4

3 に答える 3

16

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 ルールについて心配する必要はありません。

これがどのように機能するか教えてください!

于 2013-01-08T05:33:33.613 に答える
-2

iPhoneの画面ロック中にappdelegateメソッド 「-(void)applicationWillResignActive:(UIApplication *)application」 が呼び出されることを確認できます。それがあなたを助けることを願っています。

于 2013-01-07T08:06:47.473 に答える