2009-06-21 1 views
5

私は現在、iPhoneを揺するだけの非常に単純なアプリを持っています。 iPhoneはタッチイベントが発生していないので、最終的に画面が暗くなり、自動ロックされます。私は震えたときに自動ロックのタイムアウトをリセットする方法があるのだろうかと思っていましたか?iPhoneの自動ロックを遅らせても無効にしない

私は完全に私はこれを行うだろう自動ロックを無効にすることを知っている:

[[ UIApplication sharedApplication ] setIdleTimerDisabled: YES ] 

が、私は本当にそれを完全に無効にしたくありません。 iPhoneが正当に使用されていない場合は、期待どおりに自動ロックされるはずです。

ありがとうございました。

+2

私はベビーシェイクが禁止されたと思った。 –

答えて

11

[UIApplication sharedApplication].idleTimerDisabledの値は、自分のNSTimerまたは行動ジェスチャ(電話を振る)の値に基づいて切り替えることができます。アプリケーションでYES/NOに複数回設定できます。

+0

OK、私はそれを与えるでしょう。私はちょうどresetIdleTimerメソッドか何か少しクリーナーかもしれないと思った。 –

6

私のアプリで使用しているコードは次のとおりです。背景のビット:私のアプリには、WIFI経由でブラウザからデータにアクセスできるようにWebサーバーが組み込まれています。リクエストがサーバーに到着するたびに、ロックタイマーを延長します(この場合、最低2分間。一度に追加したデフォルトの時間がもう一度有効になります)。

// disable idle timer for a fixed amount of time. 
- (void) extendIdleTimerTimeout 
{ 
    // cancel previous scheduled messages to turn idle timer back on 
    [NSObject cancelPreviousPerformRequestsWithTarget:self 
     selector:@selector(reenableIdleTimer) 
     object:nil]; 
    // disable idle timer 
    [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; 

    // re-enable the timer on after specified delay. 
    [self performSelector:@selector(reenableIdleTimer) withObject:nil afterDelay: 60 * 2]; 

} 

- (void) reenableIdleTimer 
{ 
sharedApplication].idleTimerDisabled); 
    [NSObject cancelPreviousPerformRequestsWithTarget:self 
     selector:@selector(reenableIdleTimer) 
     object:nil]; 
    // disable idle timer 
    [[UIApplication sharedApplication] setIdleTimerDisabled:NO]; 
} 
+0

このコードは非常に便利です。私たちはアプリに直接落としました。ありがとう!ちょうど参考にして、iOS 5.0.1を実行しているiPad 2でのテストでは、一定の時間が実際に最小のアイドル時間になることが示唆されています。設定されたロック遅延が少ない場合、setDileTimerDisabled:NOコールの直後にも画面がロックされます。ユーザーのロック時間が固定された時間より長い場合、上記のコードは効果がありません。 – JosephH

+0

私のコードはpre-iOS4ですので、新しいバージョンのiOSでのご意見をお待ちしております。 – wkw

関連する問題