2015-09-28 1 views
2

Я разрабатываю приложение, которое использует распознавание голоса, и я хочу отключить внутренний микрофон, пока я использую Bluetooth-гарнитуру. Проблема в том, что внутренний микрофон андроида продолжает слушать, а механизм распознавания распознает слова, которые я не хочу (другие люди говорят рядом с телефоном, или окружающий шум делает признание полезным). Спасибо!Отключить встроенный микрофон 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) { 

    } 
} 

Обновленный вопрос! Я использую этот вспомогательный класс, чтобы определить, когда подключена Bluetooth-гарнитура, после чего я вызываю startVoiceRecognition() из класса BluetoothHeadset.

+0

Следуйте по ссылке http://stackoverflow.com/questions/6874881/how-does-setmicrophonemute-work –

+0

Спасибо! Пила этот пост, но это от 2-3 лет назад, и я подумал, что что-то исправлено. – cortex

ответ

0

Android должны суметь использовать гарнитуру микрофон при наличии он работает с помощью:

setAudioSource(AudioSource.DEFAULT); 

Подробнее here.

Надеюсь, это поможет.

+0

Но я вообще не использую медиа-рекордер – cortex

+0

Тогда что вы используете, нам нужна дополнительная информация, чтобы помочь вам. – Nanoc

+0

обновил вопрос. Спасибо ! Какой MediaRecorder имеет отношение к распознаванию голоса? Должен ли я создать экземпляр и установить источник звука перед запуском механизма распознавания? – cortex

 Смежные вопросы

  • Нет связанных вопросов^_^