我制作了一个广播应用程序,可以在Android 5及更高版本上正常运行。问题是:多个用户向我报告说该应用程序在OnePlus设备上崩溃,这很奇怪,因为在相同的Android版本上但在不同的设备上,它可以正常运行。
我设法找到一个拥有OnePlus的朋友,但是他来自另一个国家,所以我无法调试该设备。但是,我给他发送了一个调试apk,他给我发了这个 Image
我的猜测是问题开始于此
private void initializeMediaPlayer() {
player = new MediaPlayer();
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
player.setAudioAttributes(new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build());
} else {
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
}
try {
player.setDataSource("http://91.121.139.194:8157/stream.mp3");
} catch (IOException e) {
e.printStackTrace();
}
}
OnePlus是否以其他方式处理MediaPlayer?可能是什么问题呢?我一直在网上寻找该错误,但是发现的所有内容都是关于编码已经完成的源代码。
更新:经过更多调试后,我们还找到了Shoutcast MP3文件的确切路径。将数据源设置为正确的路径后,没有错误。没有logcat错误,也没有调试控制台错误...但这不起作用。
答案 0 :(得分:0)
它期望Context
和Uri
作为参数-而不是URL的String
表示形式。此外,您正在使用不赞成使用的方法(尽管在示例中仍然有说明)并且从不调用.prepare(),因此MediaPlayer
会停留在状态initialized
中,但不会进入{ {1}}状态,这是播放的前提。
prepared
请参见MediaPlayer和MediaPlayer overview,其中对此进行了详细说明。
PS:player.setDataSource(context, Uri.parse("http://91.121.139.194:8157/stream.mp3"));
player.prepare(); // this is a synchronous call (see the diagram).
player.start();
?也可以与shoutcast
结合使用,以提供stunnel
加密-这样就可以满足默认的网络安全策略,而无需排除。