我在玩Equalizer
,發現無論何時我開始我的應用程序,然後使用另一個均衡器應用程序,我的應用程序在試圖使用任何東西時崩潰(例如setBandLevel
)。均衡器 - 如何重新獲得控制狀態
java.lang.UnsupportedOperationException:AudioEffect:在 android.media.audiofx.AudioEffect.checkStatus(AudioEffect.java:1244) 在android.media.audiofx.Equalizer.setBandLevel(均衡器無效 參數的操作。 java:230)
我在聽onControlStatusChange
,我有信息說我的應用程序失去了對效果的控制。我怎樣才能回收它在onResume
?我想我可以清除效果實例(釋放然後無效)並再次實例化效果類v(如下面的代碼示例中所示),但想知道是否有像內置功能的setControlState(true)
這樣的東西。
@Override
protected void onResume() {
super.onResume();
if (mEqualizer.hasControl() == false) {
prepareEqualizer();//force re-gaining control
}
}
private void prepareEqualizer() {
if (mEqualizer != null) {
releaseEqualizer();
}
mEqualizer = new Equalizer(0, 0);
mEqualizer.setEnabled(true);
mEqualizer.setControlStatusListener(this);
mEqualizer.setEnableStatusListener(this);
mEqualizer.setParameterListener(this);
mMaxBands = mEqualizer.getNumberOfBands();
mGainLevels = mEqualizer.getBandLevelRange();
}
private void releaseEqualizer() {
if (mEqualizer == null)
return;
mEqualizer.setControlStatusListener(null);
mEqualizer.setEnableStatusListener(null);
mEqualizer.setParameterListener(null);
mEqualizer.release();
mEqualizer = null;
}
感謝您的支持,但它不會因爲'null'引用而崩潰。我會更新我的問題。 – 2014-11-02 01:08:34
糾正我,如果我錯了 - 在任何時候只有一個應用程序可以控制像Equalizer這樣的硬件。所以,如果其他應用程序獲得了對它的控制,那麼當您的應用程序變爲「活動」時,您將不得不重新創建新實例,對吧?我不認爲在onSaveInstanceState中保存狀態並恢復它也會有幫助。 – 2014-11-02 01:24:41
我認爲是一樣的,所以問題是「如果有像'setControlState(true)'內置功能的東西」。可能沒有,我只能檢查現有的實例'hasControl',如果不是用新的實例重新創建它。 – 2014-11-02 01:39:29