Перейти к содержанию

Использование Bluetooth гарнитуры

Описание

В сборке 1.1.0.19 добавлена возможность ввода/вывода звука через Bluetooth гарнитуру при помощи функции Flashphoner.getAudioManager().setUseBluetoothSco():

Для переключения на гарнитуру

Flashphoner.getAudioManager().setUseBluetoothSco(true);

Для переключения на другое устройство вывода

Flashphoner.getAudioManager().setUseBluetoothSco(false);

Пример использования. Обратите внимание, что для переключения на голосовой динамик телефона или проводную гарнитуру необходимо запретить использование внешнего динамика и Bluetooth гарнитуры.

code

mAudioOutput = (LabelledSpinner) findViewById(R.id.audio_output);
mAudioOutput.setOnItemChosenListener(new LabelledSpinner.OnItemChosenListener() {
    @Override
    public void onItemChosen(View labelledSpinner, AdapterView<?> adapterView, View itemView, int position, long id) {
        String audioType = getResources().getStringArray(R.array.audio_output)[position];
        switch (audioType) {
            case "speakerphone": Flashphoner.getAudioManager().setUseSpeakerPhone(true); break;
            case "phone":
                Flashphoner.getAudioManager().setUseBluetoothSco(false);
                Flashphoner.getAudioManager().setUseSpeakerPhone(false);
                break;
            case "bluetooth": Flashphoner.getAudioManager().setUseBluetoothSco(true); break;
        }
    }

    @Override
    public void onNothingChosen(View labelledSpinner, AdapterView<?> adapterView) {

    }
});

Проигрывание потока и локального медиафайла в гарнитуру

Для того, чтобы одновременно проигрывать в гарнитуру и поток с сервера, и локальный медиафайл с устройства, необходимо установить атрибут AudioAttributes.USAGE_VOICE_COMMUNICATION и запросить аудио фокус для медиаплеера, например

/**
 * Audio focus example
 */
MediaPlayer music = MediaPlayer.create(getBaseContext(), R.raw.sound1);
music.setAudioAttributes(
        new AudioAttributes.Builder()
            .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
            .build());
music.start();
AudioManager.OnAudioFocusChangeListener audioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {
    @Override
    public void onAudioFocusChange(int focusChange) {
        Log.d("AudioFocus,", "onAudioFocusChange="+focusChange);
        music.setVolume(1, 1);
    }
};
// Request audio focus for playback
int requestResult = Flashphoner.getAudioManager().getAudioManager().requestAudioFocus(audioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
Log.d("AudioFocus,", "requestResult="+requestResult);
// Abandon audio focus when playback complete
music.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        Flashphoner.getAudioManager().getAudioManager().abandonAudioFocus(audioFocusChangeListener);
    }
});