【问题标题】:UnsupportedOperationException AudioEffect: invalid parameter operationUnsupportedOperationException AudioEffect:参数操作无效
【发布时间】:2017-07-08 11:13:42
【问题描述】:

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

这里是例外

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)

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

【问题讨论】:

  • @Henry 捕捉异常始终是您是否可以使用控制条件解决问题的最后一件事
  • @Heinrich an UnsupportedOperationException 如果决定不实现某个操作,通常由接口或抽象类的具体实现抛出。客户端在调用它之前不知道具体实现是否支持该操作。否则,它必须了解所有现有(和未来)的具体实现。
  • @Henry Android 的AudioEffect 类的问题是,有时它们工作得很好,有时却不能,甚至在同一设备上也抛出异常。
  • 我也遇到了同样的异常,但是在禁用默认均衡器(在我的情况下是 lineage os 上的 audiofx )之后,它工作得很好。所以我认为错误是由于已经安装了 equalizer 。是的,在我的情况下,bassBoost.setEnabled(bassBoostPos > 0 ? true : false); 在启用另一个系统均衡器时返回 -5 else 0 。 Equalizer set enabled() 相同。如果系统有均衡器,则临时解决方案,然后调用它,否则使用你的。
  • @MeenaPintu 你是如何禁用默认均衡器的?

标签: java android android-fragments equalizer audioeffect


【解决方案1】:
  1. 在设置强度之前,需要检查它是否支持。为此,需要添加以下条件。

    if(bassBoost.getStrengthSupported()) { bassBoost.setStrength((短) bassBoostPos)); }

  2. 补充说明的是,BassBoost 强度的值应该在 0 到 1000 的范围内,表示效果最温和到最强。

【讨论】:

    【解决方案2】:

    在 AudioEffect 中,会发生 3 种错误。

    1. AudioEffect.ERROR_BAD_VALUE
    2. AudioEffect.ERROR_INVALID_OPERATION --> this occurs for your case.
    3. RuntimeException

    为什么会出现 AudioEffect.ERROR_BAD_VALUE?

    由于参数值错误,操作失败。它会导致 IllegalArgumentException 并给出错误"AudioEffect: bad parameter value"

    为什么会出现 AudioEffect.ERROR_INVALID_OPERATION?

    操作失败,因为它在错误的状态下被请求。它会导致 UnsupportedOperationException 并给出错误"AudioEffect: invalid parameter operation"

    运行时异常

    它发生在运行时。它给出了错误"AudioEffect: set/get parameter error"

    错误状态主要发生在什么时候?如何解决?

    Ans: 均衡器处理完成后,如果不调用release()方法,就会出现错误状态。所以释放均衡器对象后使其等于null。

    如果您使用 api 级别 25,请更改它。此错误主要发生在此级别。所以,如果可能的话,改变它。

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

    资源链接:

    1. https://stackoverflow.com/a/10885407/2293534
    2. https://stackoverflow.com/a/40968149/2293534
    3. Analysis of BassBoost.java class

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-08
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      • 2014-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多