Я записываю звук с микрофона устройства.Записанные данные записываются в файл.Всякий раз, когда запись заканчивается, я создаю AudioTrack, который получает файл и должен воспроизводить аудио.Это все работает на всех устройствах.
Я добавил приложение в качестве бета-версии в PlayStore, и теперь у меня возникают некоторые сбои в Crashlytics, показывающие, что некоторые пользователи иногда получают следующую ошибку.
Fatal Exception: java.lang.UnsupportedOperationException
Cannot create AudioTrack
В соответствии с трассировкой стека в этой строке из кода ниже: .build()
.
Я добавил несколько журналов Crashlytics, чтобы посмотреть, были ли какие-либо странные данные переданы методу build
, ноТам нет никаких проблем.
Согласно Crashlytics, пока это происходило только на Android 6, 7 и 8 (minSdkVersion = 21).В качестве ссылки на то, как часто это происходило: это затронуло около 100 пользователей за последние 7 дней, в то время как приложение загружалось примерно 500 раз в день.
private var _audioTrack: AudioTrack
private var _bufferSize: Int = 0
...
init {
_bufferSize = AudioTrack.getMinBufferSize(_sampleRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT)
_audioTrack = createAudioTrack(_sampleRate)
}
private fun createAudioTrack(sampleRate: Int): AudioTrack {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return AudioTrack(
AudioManager.STREAM_MUSIC,
sampleRate,
AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT,
_bufferSize,
AudioTrack.MODE_STREAM)
}
Crashlytics.log("createAudioTrack. _bufferSize: $_bufferSize. sampleRate: $sampleRate")
return AudioTrack.Builder()
.setAudioAttributes(AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build())
.setAudioFormat(AudioFormat.Builder()
.setEncoding(AudioFormat.ENCODING_PCM_16BIT)
.setSampleRate(sampleRate)
.setChannelMask(AudioFormat.CHANNEL_OUT_MONO)
.build())
.setBufferSizeInBytes(_bufferSize)
.build()
}
...
Для всех пользователей этот метод работает.Просто иногда для некоторых людей приложение вылетает.