我无法让Android MediaPlayer从在AVD模拟器上运行API 25的Icecast服务器播放MP3流,而相同的代码则可以在API 24及以下版本上运行。具体来说,prepare()方法从不返回附带的沙箱代码,并且没有声音。同样,当我在Service中调用prepareAsync()时,永远不会调用任何侦听器。 Logcat没有报告错误。
我正在编写处理API 26及更高版本的代码,但仍停留在API 25上。
到目前为止调试:
这是我的沙盒代码段。
MediaPlayer mediaPlayer = new MediaPlayer();
// For Android API 26 (Android 8 Oreo) and newer, specify AudioAttributes.
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
AudioAttributes.Builder builder = new AudioAttributes.Builder();
builder.setUsage(AudioAttributes.USAGE_MEDIA);
builder.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC);
AudioAttributes attributes = builder.build();
mediaPlayer.setAudioAttributes(attributes);
}
else {
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
}
try {
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setOnBufferingUpdateListener(this);
mediaPlayer.setOnInfoListener(this);
mediaPlayer.setOnErrorListener(this);
mediaPlayer.setOnCompletionListener(this);
mediaPlayer.setDataSource(url);
mediaPlayer.prepare();
}
catch(Exception e) {
Log.d(tag,"ERROR: Caught exception e=" + e.getMessage());
}
mediaPlayer.start();
以及我模块的build.gradle的摘录:
compileSdkVersion 26
buildToolsVersion "27.0.3"
minSdkVersion 14
targetSdkVersion 26
谢谢您的建议。