由均衡器中的java.lang.UnsupportedOperationException引起

时间:2019-02-28 14:38:54

标签: android exception equalizer

我正在尝试修复应用中的错误,但问题是我无法修复该错误 因为我无法重新创建崩溃,但是我可以获取日志,也无法确定问题所在,所以我提到了与 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)

根据建议,我已经从 io.fabric EqualizerApi code

中添加了完整的日志目录

1 个答案:

答案 0 :(得分:2)

我发现源代码的版本(https://android.googlesource.com/platform/frameworks/base/+/5bb8f80/media/java/android/media/audiofx/AudioEffect.java),尽管行号与您的堆栈跟踪不匹配。

初始化音频效果引擎的本机代码实现时,由于问题而抛出UnsupportedOperationException。在我正在查看的代码中,异常消息显示“未加载效果库”。我猜这是由以下原因之一引起的:

  • 加载路径中缺少必需的本机库。 (也许您尚未将其包含在应用中...)

  • 库的初始化代码中可能存在错误。


更新-更新的堆栈跟踪和错误消息表示在创建Virtualizer时出现问题。该消息暗示它是由于参数错误所致。

浏览AudioEffect和Virtualizer类的代码,看来Virtualizer初始化程序正在尝试从本机API检索参数以测试是否支持Virtualizer的“ strength”参数。 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版本吗?甚至还不值得支持吗?)

问题也有可能与以下问答有关: