【发布时间】:2018-05-30 18:01:20
【问题描述】:
我创建了一个 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
}
}
这在我正在测试的设备上运行良好,但我们遇到了一个问题,即我们的一个设备在尝试setDataSource 时会 100% 崩溃。
我们有多个相同的设备,都运行 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)
如何重现此崩溃并解决问题?
感谢您的宝贵时间。
【问题讨论】:
标签: android android-mediaplayer ringtone