Android は実際に再生されている着信音を検出します (Ringtone.isPlaying の問題)

StackOverflow https://stackoverflow.com/questions/2092470

  •  21-09-2019
  •  | 
  •  

質問

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 オブジェクト 他のアプリケーションが現在どのようなサウンドを再生しているかを監視することはできないと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top