Tam*_*afi 1 java android android-alarms android-mediaplayer kotlin
我正在尝试创建警报,一切正常,但即使我使用流类型也始终是媒体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()
}
}
Run Code Online (Sandbox Code Playgroud)
dgl*_*ano 13
问题是您正在MediaPlayer使用 method创建MediaPlayer.create(),AudioAttributes如果您这样做,则无法更改后者。
从文档:
为给定资源 ID 创建 MediaPlayer 的便捷方法。成功后,prepare() 将已被调用,不得再次调用。
完成 MediaPlayer 后,您应该调用 release() 以释放资源。如果不释放,过多的 MediaPlayer 实例会导致异常。
请注意,由于在此方法中会自动调用 prepare(),因此您无法更改新 MediaPlayer 的音频会话 ID(请参阅 setAudioSessionId(int))或音频属性(请参阅 setAudioAttributes(android.media.AudioAttributes))。
而不是 using 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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3284 次 |
| 最近记录: |