java.lang.UnsupportedOperationException: AudioEffect: недопустимое исключение операции параметра на нуге Android (7.0)
Я написал ниже код в методе деятельности onCreate.
MusicPlayer.getEqualizerHelper().getCurrentEqualizer().usePreset((short) 0); --- line no 1
short numberFrequencyBands = MusicPlayer.getEqualizerHelper().getCurrentEqualizer().getNumberOfBands();--- line no 2
final short lowerEqualizerBandLevel = MusicPlayer.getEqualizerHelper().getCurrentEqualizer().getBandLevelRange()[0];--- line no 3
и он прекрасно работает во всех ОС Android ниже нуга. Когда я устанавливаю свое приложение на устройство нуги, оно выдает исключение в строке № 1. Пожалуйста, предложите мне, где проблема и решение для этого. заранее спасибо
ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.ag.musicplayer, PID: 15039 java.lang.RuntimeException: невозможно запустить действие
ComponentInfo{com.ag.musicplayer/com.ag.musicplayer.activity.EqualizerActivity}: java.lang.UnsupportedOperationException: AudioEffect: недопустимая операция с параметрами в android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) в android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) в android.app.ActivityThread.-wrap12(ActivityThread.java) в android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) в android.os.Handler.dispatchMessage(Handler.java:102) в android.os.Looper.loop(Looper.java:154) в android.app.ActivityThread.main(ActivityThread.java:6077) в java.lang.reflect.Method.invoke(собственный метод) в com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) в com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) Причина: java.lang.UnsupportedOperationException Audio:: недопустимая операция параметра в android.media.audiofx.AudioEffect.checkStatus(AudioEffect.java:1273) в android.media.audiofx.Equalizer.usePreset(Equalizer.java:335) в com.ag.musicplayer.activity.EqualizerActivity.onCreate(EqualizerActivity.java:287) в android.app.Activity.performCreate(Activity.java:6664) в android.app.Instrumentation..callActivityOnCreate(Instrumentation.java:1119) в android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) в android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2707) в android.app.ActivityThread.read wread12 Activity (.java) в android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) в android.os.Handler.dispatchMessage(Handler.java:102) в android.os.Looper.loop(Looper.java:154) в android.app.ActivityThread.main(ActivityThread.java:6077) в java.lang.reflect.Method.invoke(собственный метод) в com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
2 ответа
Если вы работаете на собственном ПЗУ (но также и на другом устаревшем rom, использующем системный эквалайзер), вы должны отключить системный эквалайзер для идентификатора аудио сеанса:
private void unbindSystemEqualizer(int audioSessionId) {
Intent intent = new Intent(AudioEffect.ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION);
intent.putExtra(AudioEffect.EXTRA_AUDIO_SESSION, audioSessionId);
intent.putExtra(AudioEffect.EXTRA_PACKAGE_NAME, mContext.getPackageName());
mContext.sendBroadcast(intent);
}
Убедитесь, что ваш собственный эквалайзер включен и настройки доступны перед запуском широковещательного намерения. Это работает для меня.
Я точно не знаю, почему на нуге выдается ошибка, но одна из возможных причин заключается в том, что пресетов может не быть. Поэтому, чтобы быть уверенным, вы можете сначала проверить, доступна ли какая-либо предустановка или нет getNumberOfPresets()
,