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