在我的应用程序中录制在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);
答案 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/
如果有帮助,请告诉我。
答案 1 :(得分:0)
我在Huawei Honor 9i中也遇到了这个问题。 我发现录音也是通过电话麦克风而不是蓝牙设备麦克风进行的,但是当我打开音乐应用程序在后台播放音乐时,蓝牙麦克风可以工作。 因此,我在启动录音机时尝试播放空白的背景音乐,效果很好。