Обработка MEDIA_BUTTON не работает при запуске BluetoothSCO

Я реализую аудио-рекордер с динамиком Bluetooth. Динамик Bluetooth имеет некоторые мультимедийные кнопки, такие как воспроизведение / пауза, следующий, предыдущий. Я запускаю кнопку воспроизведения для записи и снова нажимаю для остановки. Но проблема в том, что при использовании mAudioManager.startBluetoothSco() для использования bluetooth-микрофона для записи, приемник Media_button больше не работает, не может получить никакого события.

Ниже приведен исходный код: Регистрация получателя:

    ((AudioManager) getSystemService(AUDIO_SERVICE)).registerMediaButtonEventReceiver(
            new ComponentName(
                    this,
                    MediaButtonReceiver.class.getName()));

MediaButtonReceiver:

@Override
    public void onReceive(Context context, Intent intent) {
        Log.d("MediaButtonReceiver", "onReceive Media button!" );
        KeyEvent key = (KeyEvent) intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
        Log.d("MediaButtonReceiver", "Media button! action: [" + key.getAction() + "] key code: [" + key.getKeyCode() + "]");
        if(key.getAction() == KeyEvent.ACTION_UP) {
            int action = fromKeyCodeToAction(key.getKeyCode());
            switch (action) {
                case ACTION_START_STOP_TALKING:
                    LogUtils.LOGD("MediaButtonReceiver", "Action start/stop");
                    startStopRecord();
                    break;

... Я работаю с логикой, чтобы проверить текущее состояние записи или нет. и запустить службу, чтобы начать или остановить запись. И это код для начала записи.

if (isBluetoothHeadsetConnected) {
                LogUtils.LOGI("Bluetooth", "record using headset");
                //we just start recording when the audio state is connected
                mContext.registerReceiver(mBluetoothAudioStateBroadcastReceiver, mBluetoothAudioStateIntentFilter);
                LogUtils.LOGI("Bluetooth", "startBluetoothSco");
                mAudioManager.startBluetoothSco();
                mAudioManager.setBluetoothScoOn(true);
            } else {
                LogUtils.LOGI("Bluetooth", "record normally ");
                mAudioManager.setMode(AudioManager.MODE_NORMAL);
                mAudioManager.setBluetoothScoOn(false);
                handleStartRecordJob();
            }

Если я удаляю startBluetoothSco(), приемник работает нормально, но приложение использует микрофон устройства вместо динамика bluetooth. Если я не удаляю, приемник больше не работает, и я не могу остановить рекордер. У вас есть какое-нибудь решение для работы?

1 ответ

Вы не можете использовать прослушиватель Media Button с модулем микрофона. Я предполагаю, что в глубине души он использует MediaSession так же, как микрофон (он использует android.telecom)

Другие вопросы по тегам