Медиаплеер не воспроизводит mp3 на Android API 28 - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь создать приложение для словаря.и словарь API предоставить мне URL для mp3-файла.Я использую этот код для воспроизведения mp3.

Это работает во всех версиях Android, кроме API 28.

То, что происходит в 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 голосов
/ 15 мая 2019

Вы можете столкнуться с ошибкой мультимедийного проигрывателя при воспроизведении потоковой передачи http на Android 9 (API 28)

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>

Так что, если вы хотите играть в прямом эфире http на API 28, вам следует изменить конфигурацию сети.

<?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>
0 голосов
/ 28 января 2019

Ааа .. Я узнал причину, потратив немного времени.

Проблема заключалась в том, что начиная с Android 9.0 (уровень API 28) по умолчанию отключена поддержка http-трафика в открытом тексте.

и помогла эта кодовая лаборатория .

...