いいえ、それは不可能です。理由は次のとおりです。
ドキュメントは次のとおりです。
スリープ/スリープ解除ボタンを押すことは、アプリを一時的に無効にする別のタイプの中断です。ユーザーがこのボタンを押すと、システムはタッチ イベントを無効にし、アプリをバックグラウンドに移動しますが、アプリの applicationState プロパティの値をUIApplicationStateInactive
( ではなくUIApplicationStateBackground
) に設定し、最後に画面をロックします。
上記のドキュメントで注目すべき興味深い点は、「中断が発生した場合の対処方法」の下で、Apple が特定のタスクの実行を停止することを推奨していることです。
この変更に対応して、アプリはapplicationWillResignActive:
メソッドで次のことを行う必要があります。
- タイマーやその他の定期的なタスクを停止します。
- 実行中のメタデータ クエリを停止します。
- 新しいタスクを開始しないでください。
- 動画の再生を一時停止します (AirPlay で再生する場合を除く)。
- アプリがゲームの場合は、一時停止状態に入ります。
- OpenGL ES フレーム レートを抑制します。
- 重要でないコードを実行しているディスパッチ キューまたはオペレーション キューを一時停止します。(非アクティブな間、ネットワーク リクエストやその他の時間的制約のあるバックグラウンド タスクの処理を続行できます。)
これは、完全にバックグラウンド化する準備をする以外に、Apple がアプリがこの状態で多くのことを行うことを望んでいない、または期待していないことを示しています。
関連するメモとして、スリープ/スリープ解除ボタンを押したかどうかを判断する方法を示すスレッドを次に示します。
デバイスのロックとアプリのバックグラウンドへの送信を区別することはできますか?