MediaPlayer isPlaying()总是返回false
我正在测试2部手机。 在一个设备中,即使正在播放,媒体播放器的播放()也始终返回false。 但在其他设备(lg optimus gingerbread)中,isPlaying()返回true是否正在播放else返回false。
谁能告诉我为什么会这样? 我的一些代码依赖于这个isPlaying()部分,我希望它能在所有设备上运行。
public void addSoundMedia(Context context, int resId){ MediaPlayer mp = MediaPlayer.create(context, resId); mp.setVolume(1.0f, 1.0f); try{ mPlayerList.add(mp); } catch(Exception e){} } public void playSoundMedia(int index){ try{ mPlayerList.get(index).start(); } catch(Exception e){} } public MediaPlayer getPlayer(int index){ return mPlayerList.get(index); }
现在我打电话
mPlayer.getPlayer(currentPlayingPhraseIndex).isPlaying(); //which is now returning false. Previously i was returning true but now it always return false
我也匹配了对象,这是现在的代码场景:
int phraseIndexToBePlayed = getRandomInteger(0, numberOfPhrasesSelected-1, randomPhraseGen); //get random index from 0 to (size of arraylist where i added my media) -1 currentPlayingPhraseIndex = phraseIndexToBePlayed; //for later use in another function scope mPlayer.playSoundMedia(phraseIndexToBePlayed);
我还validation了两者是否是同一媒体
mPlayer.getPlayer(currentPlayingPhraseIndex).equals(mPlayer.getPlayer(phraseIndexToBePlayed)); //it returns true so they are both same media
谢谢。
MediaPlayer非常奇怪且非常脆弱。 你几乎没有什么可以告诉你它处于什么状态 – 你所知道的任何事情都可能导致错误。
作为旁注,我发现Eclipse有时会让应用程序做得非常奇怪,莫名其妙。 清理项目并重新启动Eclipse并卸载并重新安装应用程序通常会处理那些非常糟糕的事情,因此当您发现似乎不可能的错误时,请务必尝试。
使用MediaPlayer时,请自行跟踪它应该做什么,然后永远不要相信MediaPlayer将处于您离开它的状态。 无论何时你对MediaPlayer做任何事情,都要为那可爱的IllegalStateException做准备 – 也许它正在播放,也许它已经准备好了,也许它已经暂停了,但你应该做好准备,在任何时候,它可能都处于错误的状态。 当您以这种方式编写代码时,您不太依赖于isPlaying()的准确性。
我知道没有帮助,但不幸的是,我们没有太多替代MediaPlayer的方式。
此外,虽然我们使用的是一般的MediaPlayer主题,但请注意,在UI线程上调用isPlaying()会导致ANR。 事实上,Google建议从后台处理程序线程执行所有MediaPlayer调用。 这也将序列化MediaPlayer调用的执行。