方法1:
mediaPlayer = MediaPlayer.create(context,R.raw.sound); mediaPlayer.setLooping(true); mediaPlayer.start();
方法二:
mediaPlayer = MediaPlayer.create(context,R.raw.sound); mediaPlayer.setLooping(true); mediaPlayer.setOnPreparedListener(new OnPreparedListener(){ @Override 公共无效onPrepared(MediaPlayer mp){ mp.start(); } });
解决方案
根据文档,调用start()在播放MediaPlayer不需要获取其数据并对其进行处理的本地可用资源时有效。例如,播放原始文件夹中的音频资源。
如果尝试从远程源播放资源,则最好使用OnPreparedListener(),因为它可能涉及获取和解码媒体数据。
因此,如果您确定知道您的资源在本地可用并且长度较短,请转到方法1。否则,方法2将是合适的。
理想情况下,我更喜欢这样做。
MediaPlayer mediaPlayer =新的MediaPlayer();mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mediaPlayer.setDataSource(getApplicationContext(),myUri);mediaPlayer.setOnPreparedListener(new OnPreparedListener(){@Override 公共无效onPrepared(MediaPlayer mp){ mp.start(); }});mediaPlayer.prepareAsync();