UnsupportedOperationException AudioEffect: недопустимая операция параметра
Я получаю сообщение об ошибке UnsupportedOperationException на эквалайзере в этой строке кода. bassBoost.setStrength((short) bassBoostPos);
Вот код
equalizer = new Equalizer(0, 0);
if (equalizer != null) {
equalizer.setEnabled (isEqualizer);
numBands = equalizer.getNumberOfBands();
short r[] = equalizer.getBandLevelRange();
minLevel = r[0];
maxLevel = r[1];
bassBoost = new BassBoost (0, 0);
if(bassBoost != null) {
bassBoost.setEnabled(bassBoostPos > 0 ? true : false);
bassBoost.setStrength((short) bassBoostPos);
}
Вот исключение
java.lang.UnsupportedOperationException: AudioEffect: invalid parameter
operation
at android.media.audiofx.AudioEffect.checkStatus(AudioEffect.java:1271)
at android.media.audiofx.BassBoost.setStrength(BassBoost.java:127)
Как мне это исправить, чтобы приложение не зависало. Я имею в виду, как я могу проверить, поддерживает ли устройство эту операцию, если оно не поддерживает, я бы просто пропустил эту строку. Благодарю.
2 ответа
В AudioEffect существует 3 типа ошибок.
- AudioEffect.ERROR_BAD_VALUE
- AudioEffect.ERROR_INVALID_OPERATION ->
this occurs for your case
, - RuntimeException
Почему происходит AudioEffect.ERROR_BAD_VALUE?
Операция не выполнена из-за неверного значения параметра. Это вызывает IllegalArgumentException и выдает ошибку "AudioEffect: bad parameter value"
Почему происходит AudioEffect.ERROR_INVALID_OPERATION?
Операция не выполнена, так как она была запрошена в неправильном состоянии. Это вызывает UnsupportedOperationException и выдает ошибку "AudioEffect: invalid parameter operation"
RuntimeException
Это происходит во время выполнения. Выдает ошибку "AudioEffect: set/get parameter error"
Когда неправильное состояние происходит в основном? Как сделать решение?
Ответ: После завершения процесса эквалайзера, если он не называется release()
метод, неправильное состояние происходит. Поэтому сделайте объект эквалайзера равным нулю после его освобождения.
Если вы используете API уровень 25, то измените его. Эта ошибка происходит в основном на этом уровне. Поэтому, если возможно, измените его.
Иногда создание нового AudioEffect не разрешено нативными библиотеками. потому что слишком много объектов уже существует там. Это также вызывает неправильное состояние.
Ссылка на ресурс:
Перед установкой силы его необходимо проверить, поддерживается ли он или нет. Для этого необходимо добавить условие ниже.
if (bassBoost.getStrengthSupported ()) {bassBoost.setStrength ((short) bassBoostPos)); }
Дополнительное примечание заключается в том, что значение силы BassBoost должно находиться в диапазоне от 0 до 1000, что указывает на самый слабый и сильный эффект.