android - 媒体播放器无法在 Android API 28 上播放 mp3
问题描述
我正在尝试构建一个字典应用程序。和字典 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 (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>
推荐阅读
- react-native - 更新由管理的视图的属性“背景颜色”时出错:RNCardView - React Native
- javascript - Firebase 身份验证 - 用户注销时不会调用 onAuthStateChanged (JS)
- wordpress - WordPress Nextend 社交登录插件 Facebook 登录 - 应用验证
- java - 我怎样才能避免内循环
- javascript - 将链接展开回默认文本
- api - 有没有办法通过 API 从 Google Analytics 获取特定客户端 ID 的源信息?
- label - Open Layer + GeoJson:在多边形中放置标签
- c# - c#新手:这段代码没有像我预期的那样工作......为什么?
- python - Python Sqlite3 executemany 中的绑定数量不正确
- java - 如何在命令行中运行 openjfx 11