iPhone プログラムで電話着信後の自動起動を検出できない。
SPECIAL
iPhone プログラムでの電話着信を考える
iPhone アプリでは、iPhone が電話を着信した場合に一度 applicationWillResignActive メソッドが呼び出されて、アプリがスリープ状態になります。
この状態で、着信した電話を「拒否」すれば applicationDidBecomeActive が呼び出されて、アプリがスリープ状態から復帰します。ここで着信した電話に「応答」した場合、アプリは applicationWillTerminate が呼び出されてそのまま終了し、電話が終わると再び自動起動されるようになっています。
この、電話応答した後の自動復帰をプログラムで検出できないものかと調べてみたのですけど、今のところ良い方法が思いつかないところです。
一般的には、applicationWillResignActive や applicationWillTerminate などのメソッドで必要な情報を自分で保存して、起動時にその保存した情報を元に適切な処理を行うという方法になるのでしょうか。
その場合だと、アプリ等の不備で異常終了してしまった場合と、電話を受けて正常終了した場合との判断がつかなくなってしまうので、何か良い手段があると良いのですけど。
application:didFinishLaunchingWithOptions: の動作を調べてみる
iOS SDK 4.2 でのプロジェクト作成時には、アプリケーションの起動を知らせるメソッドとして applicationDidFinishLaunching が自動的に用意されるようになっているようでしたけど、詳細な情報を受け取れる application:didFinishLaunchingWithOptions というものが用意されているようでした。
ただ、これを使って電話終了後の自動起動を検出できないか調べてみたのですけど、渡されてきた引数 "launchOptions" を確認してみても、通常起動時と電話終了後の自動復帰とで、どちらとも nil が渡されてくるようでした。
これだと、自動復帰かどうかの判断材料にはならないですね。