首页 文章

java.lang.UnsupportedOperationException:AudioEffect:Android Nougat上的无效参数操作异常(7.0)

提问于
浏览
1

我在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 o.s下面的nougat工作正常 . 当我在nougat设备上安装我的应用程序时,它会在第1行引发异常 . 请建议我在哪里遇到问题和解决方案 . 提前致谢

FATAL EXCEPTION:main进程:com.ag.musicplayer,PID:15039 java.lang.RuntimeException:无法启动活动ComponentInfo {com.ag.musicplayer / com.ag.musicplayer.activity.EqualizerActivity}:java.lang.UnsupportedOperationException :AudioEffect:android.app.A活动中的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)android.app.ActivityThread.-wrap12(ActivityThread.java)android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)的无效参数操作在android.app.A.运行时android.O.Roper.loop(Looper.java:154)的android.app.Handler.dispatchMessage(Handler.java:102)上的android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1460) . app.ActivityThread.main(ActivityThread.java:6077)位于com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:865)的java.lang.reflect.Method.invoke(Native Method)中 . android.internal.os.ZygoteInit.main(ZygoteInit.java:755)引起:java.lang.UnsupportedOperationException:AudioEffect:invalid para在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.Anstrumentation.callActivityOnCreate(Instrumentation.java:1119)android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)的android.app.Activity.performCreate(Activity.java:6664)在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.app.Looper.loop(Looper.java:154)的android.app.ActivityThread.main(ActivityThread.java:6077),位于java.lang.reflect.Method . 在com.android.internal.os.ZygoteInit.main(Zy)的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:865)中调用(Native Method) goteInit.java:755)

2 回答

  • 0

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

  • 0

    如果您在自定义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);
    }
    

    确保在启动广播意图之前启用了自定义均衡器并且设置可用这项工作对我而言 .

相关问题