【问题标题】:Disable android internal microphone禁用安卓内置麦克风
【发布时间】:2015-09-28 10:52:16
【问题描述】:

我正在开发一个使用语音识别的应用程序,我想在使用蓝牙耳机时禁用内置麦克风。问题是内部 android 麦克风一直在听,并且识别引擎识别出我不想要的词(其他人在电话附近说话,或者环境噪音使识别有用)。谢谢!


public class BluetoothHelper extends BluetoothHeadsetUtils {

    private Context _mContext;
    private AudioManager audioManager;
    private int audioModeBackup;

    public BluetoothHelper(Context context) {
        super(context);
        this._mContext = context;
        audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
    }

    @Override
    public void onScoAudioDisconnected() {
        // Cancel speech recognizer if desired
        AudioManager audioManager = (AudioManager) _mContext.getSystemService(Context.AUDIO_SERVICE);
        audioManager.setStreamSolo(AudioManager.USE_DEFAULT_STREAM_TYPE, true);


        Log.d(BluetoothHelper.class.getSimpleName(), "A2DP: " + audioManager.isBluetoothA2dpOn() + ". SCO: "
                + audioManager.isBluetoothScoAvailableOffCall());
        Toast.makeText(_mContext, "SCO Audio disconnected", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onScoAudioConnected() {
        // Should start speech recognition here if not already started
        AudioManager audioManager = (AudioManager) _mContext.getSystemService(Context.AUDIO_SERVICE);
        audioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true);
        Log.d(BluetoothHelper.class.getSimpleName(), "Is bluetooth sco on: "+audioManager.isBluetoothScoOn());

        Log.d(BluetoothHelper.class.getSimpleName(), "A2DP: " + audioManager.isBluetoothA2dpOn() + ". SCO: "
                + audioManager.isBluetoothScoAvailableOffCall()+" SCO ON: ");
        Toast.makeText(_mContext, "SCO Audio connected.  Audio is on headset SCO: " + this.isOnHeadsetSco(),
                Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onHeadsetDisconnected() {
        AudioManager audioManager = (AudioManager) _mContext.getSystemService(Context.AUDIO_SERVICE);

        Log.i(BluetoothHelper.class.getSimpleName(), "A2DP: " + audioManager.isBluetoothA2dpOn() + ". SCO: "
                + audioManager.isBluetoothScoAvailableOffCall());
        Toast.makeText(_mContext, "Bluetooth Headset Off", Toast.LENGTH_SHORT).show();
        /* Unmute the external microphone */
        setInternalMicMute(false);
    }

    @Override
    public void onHeadsetConnected() {
        AudioManager audioManager = (AudioManager) _mContext.getSystemService(Context.AUDIO_SERVICE);

        if(!audioManager.isBluetoothA2dpOn()){
            Log.d("BluetoothHelper", "Reset connection with bluetooth");
            this.setStarted(false);
            this.start();
        }
        else{
            this.mIsCountDownOn = true;
            Log.i(BluetoothHelper.class.getSimpleName(), "A2DP: " + audioManager.isBluetoothA2dpOn() + ". SCO: "
                    + audioManager.isBluetoothScoAvailableOffCall());
            Toast.makeText(_mContext, "Bluetooth Headset On.", Toast.LENGTH_SHORT).show();
            /* Mute the external microphone */
            setInternalMicMute(true);
            this.mCountDown11.start();
        }

    }


    private void setInternalMicMute(boolean mute) {

    }
}

更新问题!我正在使用这些帮助程序类来检测蓝牙耳机何时连接,然后我从 BluetoothHeadset 类调用startVoiceRecognition()

【问题讨论】:

标签: android android-5.0-lollipop android-bluetooth


【解决方案1】:

Android 应该设法使用耳机麦克风(如果可用)它是否可以使用:

setAudioSource(AudioSource.DEFAULT);

更多信息here

希望这会有所帮助。

【讨论】:

  • 但我根本没有使用媒体记录器
  • 那你用的是什么,我们需要更多信息来帮助你。
  • 更新了问题。谢谢 ! MediaRecorder 与语音识别有什么关系?在启动识别引擎之前是否必须创建一个实例并设置音频源?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多