1

ホームボタンまたはスリープ/スリープ解除ボタンをタップすると、「applicationWillResignActive」が呼び出されることを知っています。また、(ネイティブ呼び出しのような)中断が発生したときにも呼び出されます。しかし、どの方法でこのメソッドの結果を識別し、いくつかの異なる実装を行うことができますか?

4

1 に答える 1

4

すべての理由を直接特定することはできませんが、少し絞り込むことはできます。

ホーム ボタンが押され、アプリケーションがバックグラウンドに送られると、アプリはapplicationDidEnterBackground:UIApplicationDelegate で呼び出しを受け取ります。applicationWillResignActive:これは通話後に送信されるため、役に立たない場合があることに注意してください。

Audio Interruption のリスナーを登録することもできます

AudioSessionInitialize (
                        NULL,                          // 'NULL' to use the default (main) run loop
                        NULL,                          // 'NULL' to use the default run loop mode
                        audioSessionInteruptionListener,  // a reference to your interruption callback
                        self                       // data to pass to your interruption listener callback
                        );

audioSessionInteruptionListenerが呼び出され、状態がkAudioSessionBeginInterruptionより前の場合applicationWillResignActive:、通話またはアラームによって中断が発生したことがわかります。これ以上の情報はいただけないと思います。

編集

実際には、もう少し進んで、電話とアラームの割り込みを特定できると思います。現在、これはテストされていません。これは、より多くの調査の開始点を提供するためのものです。

音声ルートをトラップするためにコールバックを登録したことを覚えています。電話がかかってくると、ルーティングされる音声がスピーカー/イヤホンからなし、レシーバーに変わりました。したがって、上記の方法を使用して AudioInterruption をトラップし、オーディオ ルートの変更をトラップできると思います。オーディオ ルートがレシーバーになる場合、割り込みは電話でした。そうでなければ、それはアラームのような別のものでした。

私は iOS 5.0 を対象としていたので、以前のバージョンでは利用できない可能性があります。ドキュメントで確認する必要があります。

于 2012-10-16T13:17:33.600 に答える