簡體   English   中英

Android 5.0+ AudioManager setMode無法正常工作

[英]Android 5.0+ AudioManager setMode not working

我正在使用AudioManager,這是一個Android SystemService。 使用Android系統5.0+,我遇到一個問題,哪個AudioManager的setMode方法不起作用。

我通過測試,Android M,Lollipop .. 5.0+版本,AudioManager setMode無效。 例如:

public void initAudioImageIcon(boolean initLoad) {
    boolean isAudioHeaderMode = IMSharedPreferences.getBooleanExtra(this, IMSPConstant.SP_NAME_MESSAGE,
            IMSPConstant.SP_KEY_AUDIO_HEADER_MODE);


    if (isAudioHeaderMode) {
        mAudioHanderMode.setVisibility(View.VISIBLE);
        // audioManager.setMode(AudioManager.MODE_IN_CALL) , but android system 5.0+ no any change, getMode() == AudioManager.MODE_NORMAL
        setAudioMode(AudioManager.MODE_IN_CALL);
        audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);
        if (!initLoad) {
            showAudioModePrompt(this.getText(R.string.im_audio_in_call), 1000);
        }
    } else {
        mAudioHanderMode.setVisibility(View.GONE);
        setAudioMode(AudioManager.MODE_NORMAL);
        if (!initLoad) {
            showAudioModePrompt(this.getText(R.string.im_audio_in_speeker), 1000);
        }
    }
}

但Android 3.0 +,4.0 +還可以,只有5.0+。 所以,我不知道錯誤發生在哪里。

將音頻模式設置為:

setMode(AudioManager.MODE_IN_COMMUNICATION);
setSpeakerphoneOn(false);

當我的音頻流設置為STREAM_MUSIC時,我可以輕松地將音頻路由到耳機。 我已經在AOSP Lollipop代碼中自己測試了它。

在這個問題中,您從未提及過您的流類型。 將您的流設置為STREAM_MUSIC或STREAM_VOICE_CALL,代碼也應該適合您。

在android Lollipop中, setAudioMode(AudioManager.MODE_IN_CALL)受到限制。 它只能由具有MODIFY_PHONE_STATE權限的系統應用程序使用。 但是,您可以在正常應用程序中使用MODE_IN_COMMUNICATIONMODE_NORMAL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM