Вызывается java.lang.UnsupportedOperationException в эквалайзере - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь исправить ошибку в своем приложении, но проблема в том, что я не могу исправить ошибку, так как я не могу воссоздать сбой, но я не могу получить журнал и не могу определить, чтоявляется ли проблема, на которую я ссылался, вопросом, относящимся к UnsupportedOperationException , но до сих пор безуспешно, любая подсказка будет полезна

Log1

Fatal Exception: java.lang.RuntimeException
Unable to create service com.musicplayer.music.audioplayer.PlayerService: 
java.lang.RuntimeException: AudioEffect: set/get parameter error
android.app.ActivityThread.handleCreateService (ActivityThread.java:2801)
android.app.ActivityThread.access$1800 (ActivityThread.java:155)
android.app.ActivityThread$H.handleMessage (ActivityThread.java:1400)
android.os.Handler.dispatchMessage (Handler.java:102)
android.os.Looper.loop (Looper.java:135)
android.app.ActivityThread.main (ActivityThread.java:5343)
java.lang.reflect.Method.invoke (Method.java)
java.lang.reflect.Method.invoke (Method.java:372)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run 
(ZygoteInit.java:905)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:700)

logcat 2

    Caused by java.lang.RuntimeException
 AudioEffect: set/get parameter error
android.media.audiofx.AudioEffect.<init> (AudioEffect.java:407)
android.media.audiofx.Virtualizer.<init> (Virtualizer.java:120)
com.musicplayer.music.audioplayer.equalizermerge.model.EqualizerApi.init 
(EqualizerApi.java:23)
com.musicplayer.music.audioplayer.PlayerService.onCreate 
(PlayerService.java:400)
android.app.ActivityThread.handleCreateService (ActivityThread.java:3141)
android.app.ActivityThread.access$1800 (ActivityThread.java:178)
android.app.ActivityThread$H.handleMessage (ActivityThread.java:1640)
android.os.Handler.dispatchMessage (Handler.java:111)
android.os.Looper.loop (Looper.java:214)
android.app.ActivityThread.main (ActivityThread.java:6102)
java.lang.reflect.Method.invoke (Method.java)
java.lang.reflect.Method.invoke (Method.java:372)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run 
(ZygoteInit.java:1028)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:823)

Как и предполагалось, я добавил полный журнал cat из io.fabric EqualizerApi code

1 Ответ

0 голосов
/ 28 февраля 2019

Я нашел версию исходного кода (https://android.googlesource.com/platform/frameworks/base/+/5bb8f80/media/java/android/media/audiofx/AudioEffect.java),, хотя номера строк не соответствуют вашей трассировке стека.

Похоже, что UnsupportedOperationException выбрасывается в результате проблемыпри инициализации собственной реализации кода механизма звуковых эффектов. В коде, который я рассматриваю, сообщение об исключении говорит: «Библиотека эффектов не загружена». Я предполагаю, что это вызвано одним из следующих:

  • Требуемая собственная библиотека отсутствует в пути загрузки. (Возможно, вы не включили ее в приложение ...)

  • Возможно, существуетошибка в коде инициализации библиотеки.


Обновление - Обновленная трассировка стека и сообщение об ошибке указывают, что проблема возникает при создании Virtualizer.Это сообщение означает, что оно связано с неверным параметром.

Просматривая код для классов AudioEffect и Virtualizer, выясняется, что инициализатор Virtualizer пытается извлечь параметр изm собственный API для проверки, поддерживается ли параметр «сила» Virtualizer.Похоже, что API говорит, что он даже не понимает параметр, который должен сказать, поддерживается ли параметр прочности (!)

Комментарии в классе Virtualizer рядом с тем, где указаны номера параметров, говорятэто:

// These constants must be synchronized with those in 
// frameworks/base/include/media/EffectVirtualizerApi.h

Исходя из поведения, которое я вывел, кажется, что это не так.Другими словами, я думаю ... как-то ... вы используете версию Java API, которая не соответствует версии нативного API.

Кроме того, это может происходить из-за того, что поддержка Virtualizer на этих устройствах не работает.

Я бы предложил следующие обходные пути:

  1. Попробуйтеперехватите исключение времени выполнения в вашем методе init и обработайте функциональность Virtualizer как отключенную на устройстве.

  2. Если вы знаете, что такое устройства-нарушители, укажите свой метод init длядаже не пытайтесь настроить виртуализатор на этих устройствах.

  3. Не поддерживают эти устройства вообще.(Они старые? Работают ли они со старыми / плохо обслуживаемыми сборками Android? Они даже стоят поддерживают?)

Возможно также, что проблема связанаодин из этих вопросов и ответов:

...