簡體   English   中英

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

[英]Media player not playing mp3 on Android API 28

我正在嘗試構建一個字典應用程序。 和詞典api為我提供了mp3文件的URL。 我正在使用此代碼播放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)

在Android 9上播放http直播時,您可能會遇到媒體播放器錯誤(API 28)

2019-05-14 19:05:31.671 9198-9214 / com.xxx.sample E / MediaPlayerNative:error(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>

啊......我花了很多時間后發現了原因。

問題是,從Android 9.0(API級別28)開始,默認情況下禁用明文http流量支持。

這個代碼實驗室幫了忙。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM