媒体播放器无法在Android API 28上播放mp3

时间:2018-12-04 12:19:11

标签: android kotlin android-mediaplayer

我正在尝试构建一个字典应用程序。和dictionary api为我提供mp3文件的网址。我正在使用此代码播放mp3。

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

API 28中发生的是 -湖超过2分钟才能击中setOnPreparedListener(并非每次都如此) -然后没有任何声音进入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)

2 个答案:

答案 0 :(得分:1)

啊..我花了很多时间才找出原因。

问题是,从Android 9.0(API级别28)开始,默认情况下,明文HTTP流量支持处于禁用状态。

this code lab有所帮助。

答案 1 :(得分:0)

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

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-us

针对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 live straming,则应更改网络配置。

<?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>