由于更新至 Android 5.0 MediaPlayer 在 Samsung Galaxy S5 上无法正常工作。启动音频流后加载时间超过 10 秒。
示例代码:
MediaPlayer mPlayer new MediaPlayer();
String url = "http://149.13.0.80:80/radio1.ogg";
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.setDataSource(url);
mPlayer.prepare();
mPlayer.start();
如果我在服务中/与prepareAsync()/其他音频流中使用MediaPlayer,也会出现同样的问题。搭载 Android 5 的 Nexus 4 没有这样的问题。
有什么解决办法吗?
首先,你的代码应该被 try-catch 包围。所以您可能想要进行更新,例如
MediaPlayer mPlayer = new MediaPlayer();
String url = "http://149.13.0.80:80/radio1.ogg";
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mPlayer.setDataSource(url);
mPlayer.prepare();
mPlayer.start();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
其次,如果您的prepare() 停止,您可能会考虑使用包装在线程中的prepare() 而不是prepareAsync()。该设备可能正在执行一些挂起的行为,并试图阻止 MP。添加 actionCancel 可能会有用。
private void actionCancel(){
try {
mp.setDataSource(new String());
} catch (Exception e) {
e.printStackTrace();
android.util.Log.d(TAG,"actionCancel(): mp.setDataSource() exception");
mp.reset();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)