Android MediaPlayer OnPreparedListener

时间:2014-04-03 03:17:49

标签: android media

我正在开发一个简单的应用程序并使用MediaPlayer在1个活动中播放一些背景噪音。我正在阅读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();

        }
    });

2 个答案:

答案 0 :(得分:15)

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

如果您尝试从远程源播放资源,最好选择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对我来说一直很棘手。所以,我建议你从developer docs开始。通过它,了解状态图。我相信它会帮助你解决许多你尚未遇到的问题。

答案 1 :(得分:1)

假设您正在播放来自internet的视频,并且如果您直接启动播放器,它会崩溃,因为它可能因为某些internet问题或其他问题而无法播放。如果您使用preparedlistener,则在准备播放之前它不会启动播放器。因此,onpreparedlistener是好的,这样你的活动就不会崩溃或行为不端。