Я разрабатываю приложение, которое использует распознавание голоса, и я хочу отключить внутренний микрофон, пока я использую 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.
Следуйте по ссылке http://stackoverflow.com/questions/6874881/how-does-setmicrophonemute-work –
Спасибо! Пила этот пост, но это от 2-3 лет назад, и я подумал, что что-то исправлено. – cortex