4

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

我正在使用 Ringtone.isPlaying() 函数,因为我从 RingtoneManager 循环(成功地)所有可用的铃声。然而,它们都没有返回真实的 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
}
4

1 回答 1

6

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

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

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

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

于 2010-01-19T10:13:43.787 回答