【问题标题】:java.lang.UnsupportedOperationException: AudioEffect: invalid parameter operation exception on Android Nougat (7.0)java.lang.UnsupportedOperationException: AudioEffect: Android Nougat (7.0) 上的无效参数操作异常
【发布时间】:2018-08-19 21:21:56
【问题描述】:

我在活动的 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:AudioEffect: 无效参数操作 在 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.-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)

【问题讨论】:

  • 你是如何解决这个问题的?我也在 LineageOS 上运行我的代码,这是一个自定义 rom,所以你是否只是禁用了自定义 rom 的均衡器,或者是否有解决这个问题的方法?

标签: android android-mediaplayer equalizer


【解决方案1】:

我不完全知道为什么它会在 Nougat 上引发错误,但一个可能的原因是可能没有可用的预设。因此,为了确保您可以先使用getNumberOfPresets() 检查是否有任何预设可用。

【讨论】:

  • 这怎么可能?相同的代码为 nougat 以下的 android 版本提供预设,而不是在 nougat 上提供预设
  • 在此之前我已经添加了 getNumberOfPresets() 来初始化微调器适配器
  • 试试这个MusicPlayer.getEqualizerHelper().getCurrentEqualizer().usePreset(getCurrentPreset());
  • 终于,我得到了问题的解决方案。如果您在自定义 rom 上运行代码,则会发生此错误。我总是尝试自定义rom。当我在 android N 上检查它时,它没有崩溃。感谢@Shubham 的回复。你可以查看我的工作代码here
  • @Stanislav 嘿,实际上代码不适用于 Nougat 之后的代码,所以我处理了 Nougat 之后的异常,这就是其他玩家正在做的事情。
【解决方案2】:

如果您在自定义 ROM(以及其他使用系统均衡器的旧版 ROM)上运行,您必须为您的音频会话 ID 禁用系统均衡器:

    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);
}

在启动广播意图之前确保您的自定义均衡器已启用并且设置可用 这对我有用。

【讨论】:

  • 如果我没有运行自定义 rom 怎么办?有什么方法可以知道是否有人在运行吗?在我刷新 lineageOS 后,我遇到了这些错误。
猜你喜欢
  • 2017-07-08
  • 1970-01-01
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-06
相关资源
最近更新 更多