在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
}
答案 0 :(得分:4)
如果查看source of Ringtone
,您会发现isPlaying()
方法仅关注Ringtone
的特定实例。
当您从getRingtone()
致电RingtoneManager()
时,会创建一个新的Ringtone
对象(source)。因此,当有人调用时(如果Ringtone
对象用于执行此操作),这与用于播放声音的Ringtone
对象不同,因此isPlaying()
将始终返回false
你的情况。
isPlaying()
对象上调用true
, play()
将只返回Ringtone
。
当每个应用程序创建自己的MediaPlayer
个对象时,我认为您无法监视其他应用程序当前正在播放的声音。