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

标签 android kotlin android-mediaplayer

我正在尝试构建字典应用程序。字典 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-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 - 媒体播放器无法在 Android API 28 上播放 mp3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53612826/

相关文章:

android - 我可以在 android 中按下通话结束按钮后返回我的应用程序吗

android - 如何创建一个指针始终指向某个 GPS 位置的指南针? (在安卓系统中)

android - 在android中设置屏幕方向

Android Webview POST

java - 使用 Kotlin 从 fragment A 调用 fragment B 的方法

java - 由 java.lang.IllegalArgumentException : MediaButtonReceiver component may not be null 引起

kotlin - 为什么这个 Kotlin 方法有封闭的反引号?

kotlin - 如何在kotlin中将两个整数div转换为十进制?

android - 如何为Android Visualizer产生动态色彩

java - 共享首选项/媒体播放器出错