Android检测实际正在播放哪个铃声(Ringtone.isPlaying问题)
作者:互联网
在Android上,尝试找出正在播放的铃声时遇到了问题(我没有尝试检测默认铃声,但由于用户为特定铃声设置了特定铃声,实际播放的铃声可能有所不同联系).
我正在使用Ringtone.isPlaying()函数,因为我(成功地)从RingtoneManager中循环了所有可用的铃声.但是,它们都没有对Ringtone.isPlaying()返回true!有人知道我在做什么错吗?这是在铃声播放时肯定正在运行的代码示例:
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()方法仅关心该铃声的特定实例.
从RingtoneManager()调用getRingtone()时,它将创建一个新的Ringtone对象(source).因此,这将不同于在有人呼叫时用于播放声音的Ringtone对象(如果使用Ringtone对象),那么在您的情况下isPlaying()始终会返回false.
仅当您在特定的Ringtone对象上调用play()时,isPlaying()才会返回true.
当每个应用程序创建自己的MediaPlayer对象时,我认为您无法监视其他应用程序当前正在播放的声音.
标签:ringtone,android 来源: https://codeday.me/bug/20191106/2001713.html