У меня есть класс RingTone, который я создал для воспроизведения рингтона устройства, либо один раз, либо зацикливаясь.
class RingTone(context: Context) {
private val player = MediaPlayer()
private val audioManager: AudioManager
init {
val alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE)
player.setDataSource(context, alert) // this line may crash
audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
}
fun play(isLooping: Boolean = true): RingTone {
if (audioManager.getStreamVolume(AudioManager.STREAM_RING) != 0) {
val attributes = AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setUsage(AudioAttributes.USAGE_NOTIFICATION)
.build()
player.setAudioAttributes(attributes)
player.isLooping = isLooping
player.prepare()
player.start()
}
return this
}
}
Это прекрасно работает на устройствах, на которых я тестирую, но мы столкнулись с проблемойгде одно из наших устройств падает на 100% при попытке setDataSource
.
У нас есть несколько устройств, работающих под управлением Android 5.1.
Исключение:
Caused by java.io.IOException: setDataSource failed.: status=0x80000000
at android.media.MediaPlayer.nativeSetDataSource(MediaPlayer.java)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1090)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1079)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1032)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:968)
at com.xxxx.yyy.RingTone.<init>(RingTone.kt:21)
Как воспроизвести этот сбой и устранить проблему?
Спасибо за ваше время.