Обработка 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)