MediaPlayer无法在OnePlus上运行-为什么?

时间:2019-03-09 12:36:13

标签: android android-mediaplayer

我制作了一个广播应用程序,可以在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错误,也没有调试控制台错误...但这不起作用。

1 个答案:

答案 0 :(得分:0)

它期望ContextUri作为参数-而不是URL的String表示形式。此外,您正在使用不赞成使用的方法(尽管在示例中仍然有说明)并且从不调用.prepare(),因此MediaPlayer会停留在状态initialized中,但不会进入{ {1}}状态,这是播放的前提。

prepared

请参见MediaPlayerMediaPlayer 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加密-这样就可以满足默认的网络安全策略,而无需排除。