Android 检测实际播放的是哪个铃声(Ringtone.isPlaying 问题)

Cli*_*ive 4 android ringtone

在 Android 上,我在尝试确定实际播放的是哪个铃声时遇到了问题(我不是要检测默认铃声,但实际播放的铃声可能会有所不同,因为用户为特定铃声设置了特定铃声)接触)。

我正在使用 Ringtone.isPlaying() 函数,因为我从 RingtoneManager 循环(成功地)所有可用的铃声。然而,它们都没有返回 true 给 Ringtone.isPlaying()!任何人都知道我做错了什么?这是在环播放时肯定正在运行的代码示例:

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
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*ebb 6

如果您查看 的来源,Ringtone您会发现该isPlaying()方法只关心Ringtone.

当您getRingtone()RingtoneManager()它调用时会创建一个新Ringtone对象(source)。因此,Ringtone当有人调用时,这将与用于播放声音的对象不同(如果使用Ringtone对象来执行此操作),因此在您的情况下isPlaying()将始终返回false

isPlaying()true当您调用play()该特定Ringtone对象时才会返回。

由于每个应用程序都创建了自己的MediaPlayer对象,因此我认为您无法监控其他应用程序当前正在播放哪些声音。