媒体播放器不在Android API上播放mp3 28



我正在尝试构建一个字典应用程序。dictionary api为我提供了mp3文件的url。我用这个代码来播放mp3。

这适用于除API 28以外的所有版本的android。

API 28中发生的情况是-点击setOnPreparedListener需要2分钟以上(并非每次(-然后转到setOnCompletionListener,没有任何声音。

任何关于哪里出了问题的建议都将不胜感激。

mediaPlayer?.apply {
if(isPlaying){
return
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
var builder = AudioAttributes.Builder()
builder.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
builder.setLegacyStreamType(AudioManager.STREAM_MUSIC)
setAudioAttributes(builder.build())
}
setOnBufferingUpdateListener(this@WordHomeVM)
setOnCompletionListener(this@WordHomeVM)
setDataSource(urlString)
setOnPreparedListener { mPlayer ->
if (!isPlaying) {
start()
}
}
prepareAsync()
}

这是我得到的唯一相关日志。

2018-12-04 13:22:58.241 5772-5911/ E/MediaPlayerNative: error (1, -2147483648)
2018-12-04 13:22:58.247 5772-5772/E/MediaPlayer: Error (1,-2147483648)

在Android 9(API 28(上播放http直播时,您可能会遇到媒体播放器错误

2019-05-14 19:05:31.671 9198-9214/com.xxx.sample E/MediaPlayerNative:错误(1,-2147483648(2019-05-14 19:05:31.672 9198-9198/com.xxx.sample E/MediaPlayer:错误(1,-2147483648(

https://developer.android.com/training/articles/security-config?hl=en-美国

针对Android 9(API 28级(及更高版本的应用程序的默认配置如下:

<base-config cleartextTrafficPermitted="false">
    <trust-anchors>
        <certificates src="system" />
    </trust-anchors>
</base-config>

针对Android 7.0(API 24级(到Android 8.1(API 27级(的应用程序的默认配置如下:

<base-config cleartextTrafficPermitted="true">
    <trust-anchors>
        <certificates src="system" />
    </trust-anchors>
</base-config>

针对Android 6.0(API 23级(及更低版本的应用程序的默认配置如下:

<base-config cleartextTrafficPermitted="true">
    <trust-anchors>
        <certificates src="system" />
        <certificates src="user" />
    </trust-anchors>
</base-config>

因此,如果你想在API 28上玩http实况扫射,你应该改变你的网络配置。

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
</base-config>
</network-security-config>
<application
android:label="@string/app_name"
android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config">
</application>

啊。。我花了不少时间才发现原因。

问题是,从Android9.0(API 28级(开始,默认情况下会禁用cleartexthttp流量支持。

这个代码实验室帮了忙。

最新更新