Я играю с Equalizer
и обнаружил, что всякий раз, когда я запускаю свое приложение, а затем используя другое приложение эквалайзера, мое приложение падает при попытке использовать что-либо (например, setBandLevel
).Эквалайзер - как восстановить состояние управления
java.lang.UnsupportedOperationException: AudioEffect: недопустимая операция параметром при android.media.audiofx.AudioEffect.checkStatus (AudioEffect.java:1244) в android.media.audiofx.Equalizer.setBandLevel (Эквалайзер. java: 230)
Я слушаю onControlStatusChange
и у меня есть информация, что мое приложение потеряло контроль над эффектом. Как я могу вернуть его обратно в onResume
?
Я предполагаю, что я смог очистить экземпляр эффекта (высвободить, затем свернуть) и создать экземпляр класса эффектов снова v (как в примере кода ниже), но задавался вопросом, есть ли что-то вроде setControlState(true)
встроенных функций.
@Override
protected void onResume() {
super.onResume();
if (mEqualizer.hasControl() == false) {
prepareEqualizer();//force re-gaining control
}
}
private void prepareEqualizer() {
if (mEqualizer != null) {
releaseEqualizer();
}
mEqualizer = new Equalizer(0, 0);
mEqualizer.setEnabled(true);
mEqualizer.setControlStatusListener(this);
mEqualizer.setEnableStatusListener(this);
mEqualizer.setParameterListener(this);
mMaxBands = mEqualizer.getNumberOfBands();
mGainLevels = mEqualizer.getBandLevelRange();
}
private void releaseEqualizer() {
if (mEqualizer == null)
return;
mEqualizer.setControlStatusListener(null);
mEqualizer.setEnableStatusListener(null);
mEqualizer.setParameterListener(null);
mEqualizer.release();
mEqualizer = null;
}
Спасибо за вашу поддержку, но он не срабатывает из-за ссылки «null». Я уточню свой вопрос. –
исправьте меня, если я ошибаюсь - только одно приложение может иметь контроль над оборудованием, таким как эквалайзер, в любой момент времени. Итак, если другое приложение получило контроль над ним, тогда, когда ваше приложение станет «активным», вам придется повторно создать новый экземпляр, верно? Я не думаю, что сохранение состояния в onSaveInstanceState и восстановление его тоже поможет. –
Я думаю то же самое, поэтому вопрос заключается в «если есть что-то вроде' setControlState (true) 'встроенная функциональность». Наверное, нет, и я могу только проверить, существует ли существующий экземпляр 'hasControl' и если он не воссоздает его с новым экземпляром. –