3

ユーザーがスリープ ボタンを押しても、アプリの実行とユーザーとのやり取りを続けたいと考えています。
これまでのところ、私のアプリは次のコードで生き続けることができることを学びました:

NSTimer *timer = [NSTimer timerWithTimeInterval:0.5 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

これは成功します。このメソッド は、スリープ モードであっても 0.5 秒ごとに呼び出されます。
- (void)timerFireMethod:(NSTimer*)theTimer

だから私の問題は次のとおりです。スリープモードでアプリケーションと対話するにはどうすればよいですか? カスタム オーディオ ファイルの再生を開始するためのトリガーが必要なだけです。したがって、次を検出するようなトリガー イベントが必要です。
- ディスプレイでのタッチ
- 加速アクティビティ
- MotionShake イベント

しかし、applicationWillResignActive-Event を取得した後、上記の何も機能していません。加速度計が加速度イベントの配信を停止します。そして、私はそれらを再び開始することができません。MotionShake イベントは配信されず、スリープ中にタッチ イベントをキャッチできるかどうかもわかりません。

更新
ユーザーが私のアプリを 5 時間使用することを期待しています。しばらくアイドル状態になると、自動的にスリープ状態になります。おそらく、スリープ モードの意味を誤解していたのでしょう。Iphone は常に稼働している必要がありますが、ディスプレイとバックグラウンド ライトを常にオンにする必要はありません (これらは最も電力を消費する部分です)。10 秒ごとにノイズのないサウンドを再生している間、iPhone がスリープ状態にならないことはわかっています。また、iPod アプリケーションはそのモードで実行でき、ユーザーはデバイスを振ることで操作できることを知っています。アプリが同じことを行うための公式な方法はありませんか?
---

誰にもアイデアはありますか?

ありがとう

4

1 に答える 1

3

アプリケーションで が呼び出されたらapplicationWillResignActive、イベントの受信を停止するだけです。

デリゲートは、このメソッドを実装して、アプリケーションがアクティブな状態から非アクティブな状態に移行するときに調整を行うことができます。アプリケーションが非アクティブの場合、アプリケーションは実行されていますが、着信イベントはディスパッチされていません。これは、オーバーレイ ウィンドウがポップアップするとき、またはデバイスがロックされているときに発生します。

スリープモードのポイントは節電です。そのために、デバイスは、要求しているようなイベントのリッスンを停止します。

NSTimer イベントは、高価な (バッテリーに関する) ハードウェア監視を必要としないため、引き続き発生します。また、アラームは NSTimer を使用して実装されるため、スリープ中でも機能できる必要があります。そうしないと、人々は目を覚まして iPhone のせ​​いにしないかもしれません。

于 2009-11-26T19:06:20.653 に答える