java - MediaPlayer - setAudioAttributes 无法正常工作
问题描述
我正在尝试创建警报,一切正常,但即使我使用流类型也始终是媒体STREAM_ALARM
,因为setStreamType
已弃用,我正在使用setAudioAttributes
它,但它似乎不起作用。这是我的代码:
class AlarmRingtoneManager(val context: Context) {
private lateinit var mediaPlayer: MediaPlayer
fun start() {
mediaPlayer = MediaPlayer.create(context, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM))
.apply {
setAudioAttributes(AudioAttributes.Builder()
.setFlags(AudioAttributes.FLAG_AUDIBILITY_ENFORCED)
.setLegacyStreamType(AudioManager.STREAM_ALARM)
.setUsage(AudioAttributes.USAGE_ALARM)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build())
isLooping = true
start()
}
}
fun stop() {
mediaPlayer.stop()
}
}
解决方案
问题是您正在MediaPlayer
使用该方法创建,如果您这样做,MediaPlayer.create()
则无法更改后者。AudioAttributes
从文档中:
为给定资源 ID 创建 MediaPlayer 的便捷方法。成功时,prepare() 将已经被调用,并且不能再次调用。
完成 MediaPlayer 后,您应该调用 release() 来释放资源。如果不释放,过多的 MediaPlayer 实例将导致异常。
请注意,由于在此方法中会自动调用 prepare(),因此您无法更改新 MediaPlayer 的音频会话 ID(参见 setAudioSessionId(int))或音频属性(参见 setAudioAttributes(android.media.AudioAttributes)。
而不是 using create()
,只需实例化MediaPlayer
using 默认构造函数new MediaPlayer();
。然后,使用该方法设置源,setDataSource()
并像以前一样设置其余的 AudioAttributes。
我不了解 Kotlin,但在 Java 中它看起来像这样:
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioAttributes(AudioAttributes.Builder()
.setFlags(AudioAttributes.FLAG_AUDIBILITY_ENFORCED)
.setLegacyStreamType(AudioManager.STREAM_ALARM)
.setUsage(AudioAttributes.USAGE_ALARM)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build());
mediaPlayer.setDataSource(context, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM));
mediaPlayer.setLooping(true);
mediaPlayer.prepare();
mediaPlayer.start();
推荐阅读
- php - 为什么 route() 函数现在可以使用 laravel 工作?
- hive - 无法让 Hive SerDe 工作 - 返回 0 条记录
- git - 克隆后回购损坏
- testing - 在类级别设置 TestNG 组名
- networking - 从 Microsoft Network Monitor 3.4 获取标头和请求正文
- .net - 在同一个项目中结合 MVC + Blazor
- docker - 如何在 Ubuntu 上启动 Docker 守护进程?
- reactjs - 在 React 中更新计数器的正确方法是什么
- javascript - 与 flex-wrap 的案例冲突:增加宽度 onHover 时换行
- android - 运行我的代码给出一个异常“org.gradle.api.UncheckedIOException”