Android 使用蓝牙耳机在Oreo中录制音频问题

Android 使用蓝牙耳机在Oreo中录制音频问题,android,bluetooth,audio-recording,android-8.0-oreo,Android,Bluetooth,Audio Recording,Android 8.0 Oreo,在我的应用程序中,音频记录在前台服务中。连接蓝牙SCO后,我开始录制。从Android KitKat到牛轧糖,它的工作状态都很好。但当我尝试使用华为荣誉8(Android Oreo)时,音频是从手机麦克风而不是蓝牙耳机麦克风录制的。当我在Google pixel 2上试用时,录音根本不起作用 启动蓝牙SCO 录音配置 Android已经改变了通过蓝牙通信的数据长度。退房 为了解决这个问题,许多原始设备制造商建议您可能需要擦除设备缓存。 查看此快速修复指南 android oreo问题的10个常

在我的应用程序中,音频记录在前台服务中。连接蓝牙SCO后,我开始录制。从Android KitKat到牛轧糖,它的工作状态都很好。但当我尝试使用华为荣誉8(Android Oreo)时,音频是从手机麦克风而不是蓝牙耳机麦克风录制的。当我在Google pixel 2上试用时,录音根本不起作用

启动蓝牙SCO

录音配置


Android已经改变了通过蓝牙通信的数据长度。退房

为了解决这个问题,许多原始设备制造商建议您可能需要擦除设备缓存。

查看此快速修复指南

android oreo问题的10个常见修复

在安全模式下重新启动


如果有帮助,请告诉我。

我在华为荣誉9i也有这个问题。 我发现用手机麦克风而不是蓝牙设备麦克风录音,但当我打开音乐应用程序在后台播放音乐时,蓝牙麦克风工作正常。
因此,当我启动录音机时,我尝试播放一段空白的背景音乐,效果很好。

如果我在最初的问题中回答“否”,那么它就会得到回答。你还想要什么?请在您的问题中澄清。@tiagoperes,这是我在尝试从蓝牙耳机录制音频时遇到的问题。我已经编辑了我的问题,希望它现在更清楚。谢谢。谢谢Mohit Ajwani,第一个链接与ScanRecord长度有关。与录制无关不可能告诉所有用户擦除缓存,因为它只是一个应用程序。尝试了许多设备,但始终从手机麦克风捕获音频。其他链接也基于用户的观点。所以这也没用。我为同样的@Sujith道歉。我会看看我是否能找到更多关于同样的信息,然后再给你回复。
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();
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);