我在此代码行的均衡器上收到 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);
}

这是异常(exception)
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)

我如何解决此问题,以使应用程序不会崩溃。我的意思是我该如何检查设备是否支持此操作,如果不支持,我将跳过此行。谢谢。

最佳答案

在AudioEffect中,发生3种类型的错误。

  • 音频效果。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()方法,则会发生错误的状态。因此,释放均衡器后,使其等于null。

    如果您使用的是api级别25,请进行更改。此错误主要发生在此级别。因此,如有可能,请进行更改。

    有时, native 库不允许实例化新的AudioEffect。因为那里已经存在太多对象。它还会导致错误状态。

    资源链接:
  • https://stackoverflow.com/a/10885407/2293534
  • https://stackoverflow.com/a/40968149/2293534
  • Analysis of BassBoost.java class
  • 10-04 21:25