Android MediaPlayer OnPreparedListener

Jas*_*son 10 media android

我正在开发一个简单的应用程序并使用MediaPlayer在1个活动中播放一些背景噪音.我正在阅读MediaPlayer,我不确定是否要实现OnPreparedListener来触发start()方法.每种方法的优缺点是什么?

方法1:

    mediaPlayer = MediaPlayer.create(context, R.raw.sound);
    mediaPlayer.setLooping(true);
    mediaPlayer.start();
Run Code Online (Sandbox Code Playgroud)

方法2:

    mediaPlayer = MediaPlayer.create(context, R.raw.sound);
    mediaPlayer.setLooping(true);
    mediaPlayer.setOnPreparedListener(new OnPreparedListener() {

        @Override
        public void onPrepared(MediaPlayer mp) {
            mp.start();

        }
    });
Run Code Online (Sandbox Code Playgroud)

Pur*_*war 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();
Run Code Online (Sandbox Code Playgroud)

MediaPlayer向来棘手我一起工作.所以,我建议你从开发人员文档开始.通过它,了解状态图.我相信它会帮助你解决许多你尚未遇到的问题.

  • 我的资源现在都是本地的(R.raw),但是您能否澄清“如果您确定知道您的资源在本地可用并且长度很短”的意思。资源需要多短才能保证资源将直接调用 start() 使用? (2认同)