若使用setDataSource()方法播放网络上的音频文件,需要开启新的线程。以下是示例代码:
public class MainActivity extends AppCompatActivity implements MediaPlayer.OnPreparedListener {
private MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mediaPlayer = new MediaPlayer();
mediaPlayer.setOnPreparedListener(this);
try {
mediaPlayer.setDataSource("http://example.com/audio.mp3");
mediaPlayer.prepareAsync();
} catch (IOException ex) {
ex.printStackTrace();
}
}
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
}
}
在setDataSource()方法后,我们调用了prepareAsync(),这将在后台线程中准备媒体播放器以播放音频文件。在MediaPlayer准备好文件之后,onPrepared()回调函数将调用start()方法以开始播放音频文件。这个方法同时也是很好的错误处理方法,因为它在文件没有成功准备好的情况下不会尝试播放文件。此外,onPrepared()还可以在MediaPlayer准备好下一个文件时进行缓冲或转换。