ユーザーによる通話の開始と終了を検出するために、PHONE_STATE リスナーを登録しました。誰かが疑問に思っている場合に備えて、私はこれを楽しみと学習のために厳密に行っているので、プライバシーの問題はありません.
とにかく、telnet とエミュレーターを試しているときに問題に気付きました。1 つの通話が保留中で、2 番目の通話 (アクティブな通話) が終了した特定のシナリオでは、リスナーはイベントを受け取りません。IDLE + OFFHOOKの両方ではないにしても、最初のコールが再びアクティブになったときに、少なくとも別のOFFHOOKを受信することを期待していました。しかし、何もありません。
関連して、通話を保留にするための電話状態イベントが定義されていないことにも気付きました。これも少し奇妙に思えます。
もちろん、Android ログ エントリはこれらのイベントを正しく反映しています。問題は、コード内でそれらを確実に検出するにはどうすればよいかということです。電話の状態リスナーに頼るのではなく、ログ自体を監視する必要がありますか (それが可能かどうかはわかりません)。
Xamarin Studio を介してエミュレーターで API 15 をテストしているため、コードは Java ではなく Mono 上の C# + Xamarin.Android です。この動作は、これらのレイヤーの 1 つのバグまたは省略にすぎない可能性がありますが、明らかな何かを見落としている可能性が高いです。
FWIW、実際のデバイスでコードをまだテストしていません。特定のハードウェアが、エミュレーターで表示されるものとは少し異なる動作をする可能性があることを認識しています。