我正在尝试创建警报,但一切正常,但是即使我使用STREAM_ALARM
,流类型也始终是媒体,因为setStreamType
已过时,因此我正在使用{{1} }代替,但似乎不起作用。
这是我的代码:
setAudioAttributes
答案 0 :(得分:1)
问题是您正在使用方法MediaPlayer
创建MediaPlayer.create()
,并且如果以后那样做,则无法更改AudioAttributes
。
为给定资源ID创建MediaPlayer的便捷方法。 开启 成功,prepare()将已经被调用,并且不能被调用 再次打电话。
使用MediaPlayer完成后,您应该调用release()来释放 资源。如果不发布,将导致太多MediaPlayer实例 例外。
请注意,由于在此方法中会自动调用prepare(),因此您 无法更改音频会话ID(请参阅setAudioSessionId(int))或 音频属性(请参阅 新的setAudioAttributes(android.media.AudioAttributes) MediaPlayer。
代替使用create()
,只需使用默认构造函数MediaPlayer
实例化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();
答案 1 :(得分:0)
Kotlin 版本
val uri = Settings.System.DEFAULT_ALARM_ALERT_URI ?: Settings.System.DEFAULT_RINGTONE_URI
uri?.let {
val player = MediaPlayer()
player.setAudioAttributes(
AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ALARM)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build()
)
//player.reset() //uncomment this line if you use local variable of MediaPlayer
player.setDataSource(this@AlarmActivity, it)
player.prepare()
player.start()
}