Android MediaPlayer OnPreparedListener

我正在研究一个简单的应用程序,并使用MediaPlayer播放一些背景噪音。 我正在阅读MediaPlayer,并不确定是否实施OnPreparedListener触发start()方法。 每种方法有哪些优点/缺点?

方法1:

mediaPlayer = MediaPlayer.create(context, R.raw.sound); mediaPlayer.setLooping(true); mediaPlayer.start(); 

方法2:

  mediaPlayer = MediaPlayer.create(context, R.raw.sound); mediaPlayer.setLooping(true); mediaPlayer.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mp.start(); } }); 

Solutions Collecting From Web of "Android MediaPlayer OnPreparedListener"

根据文档,当您播放本地可用的资源时,调用start()是有效的, MediaPlayer不需要获取数据并对其进行处理以便播放。 例如从原始文件夹播放audio资源。

如果您尝试从远程源播放资源,则更好的做法是使用OnPreparedListener()因为它可能涉及获取和解码媒体数据。

所以,如果你确实知道,你的资源是本地可用的,并且长度很短,那么去Approach 1 。 否则Approach 2将是合适的。

理想情况下,我更喜欢这个。

 MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setDataSource(getApplicationContext(), myUri); mediaPlayer.setOnPreparedListener(new OnPreparedListener(){ @Override public void onPrepared(MediaPlayer mp) { mp.start(); } }); mediaPlayer.prepareAsync(); 

MediaPlayer对我来说一直很棘手。 所以,我build议您从开发人员文档开始。 通过它,了解状态图。 我相信这会帮助你解决很多你还没有遇到的问题。

假设你正在从internet播放video,如果你直接启动播放器,它会崩溃,因为它可能没有准备好玩,因为一些internet问题或其他。 如果你使用preparedlistener那么在准备好播放之前它不会启动播放器。 因此,有准备好的onpreparedlistener是好的,所以你的活动不会崩溃或行为不端。