奥利奥使用蓝牙耳机录音的问题

时间:2018-05-23 06:21:53

标签: android bluetooth audio-recording android-8.0-oreo

在我的应用程序中录制在Foreground服务中的音频。连接蓝牙SCO后我开始录制。它的工作正常Android KitKat到Nougat。但是当我尝试使用华为Honor 8(Android Oreo)时,音频是通过手机麦克风而不是蓝牙耳机麦克风录制的。当我尝试使用Google pixel 2时,录制功能根本无法使用。

  

启动蓝牙SCO

am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
registerReceiver(new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        int state = intent.getIntExtra(AudioManager.EXTRA_SCO_AUDIO_STATE, -1);
        Log.d(TAG, "Audio SCO state: " + state);
        if (AudioManager.SCO_AUDIO_STATE_CONNECTED == state) { 
            am.setBluetoothScoOn(true);
            unregisterReceiver(this);
            startRecord();
        }
    }
}, new IntentFilter(AudioManager.ACTION_SCO_AUDIO_STATE_CHANGED));
am.startBluetoothSco();
  

AudioRecord config

final int RECORDER_SAMPLERATE = 8000;
final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_MONO;
final int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT;

int bufferSize = AudioRecord.getMinBufferSize(RECORDER_SAMPLERATE,
        RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING);
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
        RECORDER_SAMPLERATE, RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING, bufferSize);

2 个答案:

答案 0 :(得分:2)

Android已经改变了通过蓝牙进行通信的数据长度。查看https://developer.android.com/about/versions/oreo/android-8.0-changes

要解决此问题,许多OEM都建议您可能需要擦除设备缓存。 https://forums.oneplus.com/threads/bluetooth-audio-is-ruined-after-oreo-update.699589/

查看此快速解决方法指南https://www.theandroidsoul.com/fix-android-oreo-bluetooth-issues/

针对android oreo问题的10个常见修复程序。 https://www.gottabemobile.com/android-oreo-problems-fixes/

以安全模式重启。 https://support.google.com/android/answer/7665064?hl=en&ref_topic=6023296&visit_id=1-636636939996434821-3584672143&rd=1

如果有帮助,请告诉我。

答案 1 :(得分:0)

我在Huawei Honor 9i中也遇到了这个问题。 我发现录音也是通过电话麦克风而不是蓝牙设备麦克风进行的,但是当我打开音乐应用程序在后台播放音乐时,蓝牙麦克风可以工作。 因此,我在启动录音机时尝试播放空白的背景音乐,效果很好。