在 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
}

最佳答案

如果您查看 source of Ringtone ,您会发现 isPlaying() 方法只关心 Ringtone 的那个特定实例。

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

如果您在特定的 isPlaying() 对象上调用了 true,那么 play() 只会返回 Ringtone

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

关于Android 检测实际播放的是哪个铃声(Ringtone.isPlaying 问题),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2092470/

10-09 03:51