Android は実際に再生されている着信音を検出します (Ringtone.isPlaying の問題)
質問
Android では、どの着信音が実際に再生されているかを把握するのに問題があります (デフォルトの着信音を検出しようとしているわけではありませんが、ユーザーが特定の着信音に特定の着信音を設定しているため、実際に再生されている着信音は異なる可能性があります)。接触)。
RingtoneManager から利用可能なすべての着信音を (正常に) 循環するときに、Ringtone.isPlaying() 関数を使用しています。ただし、どれも Ringtone.isPlaying() に対して true を返すことはありません。私が何を間違っているのかわかる人はいますか?以下は、リングの再生中に確実に実行されるコードサンプルです。
RingtoneManager rm = new RingtoneManager(this); // 'this' is my activity (actually a Service in my case)
if (rm != null)
{
Cursor cursor = rm.getCursor();
cursor.moveToFirst();
for (int i = 0; ; i++)
{
Ringtone ringtone = rm.getRingtone(i); // get the ring tone at this position in the Cursor
if (ringtone == null)
break;
else if (ringtone.isPlaying() == true)
return (ringtone.getTitle(this)); // *should* return title of the playing ringtone
}
return "FAILED AGAIN!"; // always ends up here
}
解決
見てみると、 のソース Ringtone
ことがわかります isPlaying()
メソッドはその特定のインスタンスのみを考慮します Ringtone
.
電話をかけるとき getRingtone()
から RingtoneManager()
それは新しいものを生み出す Ringtone
物体 (ソース)。したがって、これは同じではありません Ringtone
誰かが電話をかけてきたときにサウンドを再生するために使用されるオブジェクト (場合 Ringtone
そのためにオブジェクトが使用されます) isPlaying()
必ず戻ってきます false
あなたの場合は。
isPlaying()
決して戻ってくるだけです true
あなたが電話した場合 play()
その特定のことについて Ringtone
物体。
各アプリケーションが独自に作成するため、 MediaPlayer
オブジェクト 他のアプリケーションが現在どのようなサウンドを再生しているかを監視することはできないと思います。