9

applicationWillResignActiveとapplicationDidBecomeActiveを使用することで、iPhoneがスリープ状態になり、スリープ状態から復帰したことを検出できます。しかし、それがどのような割り込みであったかをどのように知ることができますか。私はオーディオプレーヤーアプリケーションを作成していますが、iPhoneがスリープ状態になったときにオーディオを再生し続ける必要があります(これは私が行う方法を知っています)。ただし、メッセージ、アラーム、またはバッテリ低下の割り込みが発生した場合は、オーディオを中断する必要があります。また、イベントが終わったらオーディオを再開する必要があります。

では、これらの異なる割り込みをどのように区別するのでしょうか。

4

2 に答える 2

5

その情報はおそらくアプリでは利用できませんが、試してみるべきことがいくつかあります。

  1. applicationWillResignActive:、NSNotification の object プロパティと userInfo プロパティをチェックして、ヒントがあるかどうかを確認します。

  2. デフォルトの通知センターに投稿されたすべての通知を受け取るように登録します。

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveNotification:) name:nil object:nil];
    

何かが投稿されると、メソッドが呼び出されます。通知オブジェクトと userInfo ディクショナリをログに記録すると、有用な通知が投稿されていることがわかるでしょう。見つけたら、それだけで登録できます。

  1. これは最もハックですが、メッセージまたはバッテリー警告である場合に表示されるアラートにアクセスできる可能性があります。アラートは、アプリのメイン UIWindow の上にある UIWindow に表示されます。UIWindowDidBecomeVisibleNotification に登録してから、ウィンドウのサブビューを調べて、アラートやその他の有用な手がかりが見つかるかどうかを確認できます。

上記の方法はすべて、文書化されていない動作に依存しているため、提出物が App Store から拒否される可能性があります。プライベート メソッドの呼び出しは含まれませんが、文書化されていない通知名を観察することはプライベート API としてカウントされると主張できます。結局、重要なのは Apple の意見だけです。

個人的には、システムが変更された場合にコードが正常に失敗することを確認して、試してみます。

于 2009-12-13T23:24:29.977 に答える
-1

オーディオ セッションを使用しますか?

于 2010-04-16T19:39:06.933 に答える