其他分享
首页 > 其他分享> > Android检测实际正在播放哪个铃声(Ringtone.isPlaying问题)

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