Android 在后台播放的MediaPlayer引发意外的流结束

Android 在后台播放的MediaPlayer引发意外的流结束,android,service,media-player,Android,Service,Media Player,我们正在开发一个播放播客的应用程序,我们正在使用服务和媒体播放器播放服务器中的文件,在一些棉花糖设备中,我们遇到了这个错误(摩托罗拉g4): 但只有当应用程序被终止,服务开始运行时,才会发生这种情况。当应用程序位于前台时,它工作正常,我们注意到缓冲工作正常,但当应用程序终止时,它不能再缓冲更多,它会重新设置限制,然后抛出错误。。。在其他设备中,缓冲工作正常 下面是准备媒体播放器的代码块 Map<String, String> headers = new HashMap<>

我们正在开发一个播放播客的应用程序,我们正在使用服务和媒体播放器播放服务器中的文件,在一些棉花糖设备中,我们遇到了这个错误(摩托罗拉g4):

但只有当应用程序被终止,服务开始运行时,才会发生这种情况。当应用程序位于前台时,它工作正常,我们注意到缓冲工作正常,但当应用程序终止时,它不能再缓冲更多,它会重新设置限制,然后抛出错误。。。在其他设备中,缓冲工作正常

下面是准备媒体播放器的代码块

Map<String, String> headers = new HashMap<>();
headers.put("Content-Type", "audio/mp3");
headers.put("Accept-Ranges", "bytes");
headers.put("Status", "206");

mp = new MediaPlayer();
Uri uri = Uri.parse(songPath); 

mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.setDataSource(getApplicationContext(), uri, headers);
mp.prepareAsync();
Map headers=newhashmap();
标题。放置(“内容类型”、“音频/mp3”);
headers.put(“接受范围”、“字节”);
标题。放置(“状态”、“206”);
mp=新媒体播放器();
Uri=Uri.parse(songPath);
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
setDataSource(getApplicationContext(),uri,头文件);
mp.prepareAsync();
添加标题是因为我们看到了一篇文章,但它的结果与没有的结果相同


有什么建议吗?

在后台播放音频比这要复杂一些。如果您只是在使用
MediaPlayer
,那么当Android决定释放资源时,该组件的容器(即
Activity
)或打开的http连接可能会被破坏。当您切换到另一个应用程序时,或者当设备(某些其他应用程序)使用太多资源时,或者当操作系统决定这是一个好时机时,都可能发生这种情况

然而,
MediaPlayer
只是背景音频播放的一部分。 我建议你看看关于如何构建音频应用程序的官方指南。

我还发现了一个解释得很好的分步教程,它也有帮助

是的,它是按照那里的教程完成的,它在其他设备中工作得非常好,当歌曲结束时,下一首歌曲开始正常(它完美地保留了URL和媒体播放器)。。。我想是流和GC的关系。。。每首歌曲的长度约为30分钟或更长。您是否已获得wifi锁定,以便在设备屏幕关闭时wifi保持打开状态?它有一个接收器,用于检测互联网连接的更改:/并且当用户在其他应用程序中时也会发生这种情况……目前我正在Twitter应用程序上导航时进行测试,并且只有在Andorid 6中是这样正在发生错误。:/在其他手机中,它工作得相当好。
Map<String, String> headers = new HashMap<>();
headers.put("Content-Type", "audio/mp3");
headers.put("Accept-Ranges", "bytes");
headers.put("Status", "206");

mp = new MediaPlayer();
Uri uri = Uri.parse(songPath); 

mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.setDataSource(getApplicationContext(), uri, headers);
mp.prepareAsync();