2009-05-22 11 views
5

この質問はこのフォーラムのいくつかの本質のようです。アクティブなiPhoneアプリケーションが継続して実行され、具体的には、非アクティブ状態に入った後に(アイドルタイマーが画面ロックを蹴るか、またはユーザーが押している間に)タイマーコールバックを受け続けることが可能であると考えていますハードウェアロックボタン)。iPhoneアプリケーションが動作していない間のNSTimerコールバック

ドキュメントでは、アプリケーションがアクティブではない間に実行中ですが、着信イベントをディスパッチしないことを具体的に示しています(NDAについては不安なのでリンクしません。違反?sigh)。

また、ユーザー "Ambr Str"の2つの回答は、タイマーコールバックの受信を継続することができると直接記述しており、達成のためのコードを提供しています(これは私が新しいユーザー、申し訳ありません - 「iPhoneがスタンバイモードに入ったときにiPhoneアプリに何が起こるのですか?」という質問を検索して答えを見つける)。

私は自分のコールバックを作成しようとしましたが、私のアプリケーションが非アクティブになると、コールバックの実行が停止します。

iPhoneが接続されている間、アイドルタイムアウトまたはスリープボタンが押されたためにアプリケーションが非アクティブになった場合、コールバックが引き続き発生することに気付きました。

答えて

2

アップルのフォーラムでこの質問によく答えています。 "タイマー"と "エスキモー"(答えを提供する有益なチャプ)を検索してください。

簡単に言えば、アプリケーションがアクティブになっていない直後に、電話機は実際にスリープ状態になります。これを防ぐ唯一の方法は、いくつかのオーディオを再生することです(またはバックグラウンドアプリケーションで再生されるオーディオの一部)。音声が再生されている間は電話がスリープしないので、アプリケーションは引き続き実行されます。

起床中の覚醒オーディオを再生することはハックであり、可能な限り行うべきではありません。私は自分のアプリケーション(無音の時間帯に散在しているオーディオの再生を行う)では、理想的ではないにしても、そのアプローチが有効だと思います!

+1

UIApplication.idleTimerDisabledはまったく役に立ちますか、ユーザーが手動でスリープボタンを押したときに機能しませんか? –

+1

あなたが提案したように、ユーザーがスリープボタンを押した場合、UIApplication.idleTimerDisabledは機能しませんが、それ以上のことはありません... UIApplication.idleTimerDisabledは、アプリケーションが非アクティブ状態になるのを止めたい場合に最適です。デバイスは対話しません。ゲームには適しています。 私の場合、特にアプリケーションを非アクティブにしたい(できるだけデバイスの電源を確保したい)。さらに、私は、入力が受信されないようにユーザがデバイスをロックできるようにしたい。 –

+0

iOS 5との互換性のある実装はhttps://github.com/mruegenberg/MMPDeepSleepPreventerです – mrueg

0

私はアプリを持っています。埋め込まれたウェブサーバを含む。私は、自動スリープIFFを無効にするオプションを提供する予定で、サーバーの電源が入っていて、デバイスの電源が入っています。したがって、UIDeviceのbatteryStateプロパティをチェックすることを検討してください。したがって、batteryState!= UIDeviceBatteryStateUnpluggedの場合は、アイドルタイマーを無効にしてください。 (注:シミュレータでは、UIDeviceBatteryStateUnknownが返されます)

また、UIDeviceBatteryStateUnplugged通知をリスンして、適切にbatteryMonitoringEnabledを設定することもできます。

関連する問題