Android 实现蓝牙录音 客官°小女子只卖身不卖艺 2022-04-25 03:02 1038阅读 0赞 \#Android 实现蓝牙录音 本文实现使用AudioRecord 来进行蓝牙录音。 主要是通过打开蓝牙SCO通路实现。 这里不考虑连接蓝牙问题,要确保蓝牙连接成功。 app的界面 ![1][] 实现功能:普通录音、停止、播放和蓝牙录音、停止、播放。 具体的实现过程: 这里封装了打开SCO的工具类。 先是打开SCO通道后进行蓝牙录音。 使用AudioRecord 来进行蓝牙录音。 使用AudioTrack 来进行播放。 下面是打开SCO的工具类: package com.recorder.huawei.recorderdemo; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.media.AudioManager; import android.support.annotation.NonNull; import android.util.Log; public class BluetoothUtil { private String TAG = "BluetoothUtil"; private static BluetoothUtil mBluetoothUtil; //第一次打开sco没成功的情况,持续连接的次数 private static final int SCO_CONNECT_TIME = 5; private int mConnectIndex = 0; private AudioManager mAudioManager = null; static Context mContext; private BluetoothUtil() { if (mAudioManager == null) { mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); } } public static BluetoothUtil getInstance(Context context) { mContext = context; if (mBluetoothUtil == null) { mBluetoothUtil = new BluetoothUtil(); } return mBluetoothUtil; } public void openSco(@NonNull final IBluetoothConnectListener listener) { if (!mAudioManager.isBluetoothScoAvailableOffCall()) { Log.e(TAG, "系统不支持蓝牙录音"); listener.onError("Your device no support bluetooth record!"); return; } new Thread(new Runnable() { @Override public void run() { //mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); //蓝牙录音的关键,启动SCO连接,耳机话筒才起作用 mAudioManager.stopBluetoothSco(); mAudioManager.startBluetoothSco(); //蓝牙SCO连接建立需要时间,连接建立后会发出ACTION_SCO_AUDIO_STATE_CHANGED消息,通过接收该消息而进入后续逻辑。 //也有可能此时SCO已经建立,则不会收到上述消息,可以startBluetoothSco()前先 //stopBluetoothSco() mConnectIndex = 0; mContext.registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { int state = intent.getIntExtra(AudioManager.EXTRA_SCO_AUDIO_STATE, -1); boolean bluetoothScoOn = mAudioManager.isBluetoothScoOn(); Log.i(TAG, "onReceive state=" + state + ",bluetoothScoOn=" + bluetoothScoOn); if (AudioManager.SCO_AUDIO_STATE_CONNECTED == state) { // 判断值是否是:1 Log.e(TAG, "onReceive success!"); mAudioManager.setBluetoothScoOn(true); //打开SCO listener.onSuccess(); mContext.unregisterReceiver(this); //取消广播,别遗漏 } else {//等待一秒后再尝试启动SCO Log.e(TAG, "onReceive failed index=" + mConnectIndex); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } if (mConnectIndex < SCO_CONNECT_TIME) { mAudioManager.startBluetoothSco();//再次尝试连接 } else { listener.onError("open sco failed!"); mContext.unregisterReceiver(this); //取消广播,别遗漏 } mConnectIndex++; } } }, new IntentFilter(AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED)); } }).start(); } public void closeSco() { boolean bluetoothScoOn = mAudioManager.isBluetoothScoOn(); Log.i(TAG, "bluetoothScoOn=" + bluetoothScoOn); if (bluetoothScoOn) { mAudioManager.setBluetoothScoOn(false); mAudioManager.stopBluetoothSco(); } mBluetoothConnectListener = null; } public interface IBluetoothConnectListener { void onError(String error); void onSuccess(); } IBluetoothConnectListener mBluetoothConnectListener; } 之前上网查了几个资料,好几个都不好使, 有的是直接设置几个参数,那样是肯定不行的。 后面发现通过打开sco通道的方式可以进行蓝牙录音! 进行蓝牙录音要确保权限通过,蓝牙是动态权限, 还有一个是打开sco的重要权限,一定要在AndroidManafest中声明。 下面是蓝牙录音存储相关的权限: <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 后面在评论区会附带源码和apk文件。 \#共勉:你一直在等,所以你一事无成。 [1]: /images/20220210/22521c0ed1ec4dc090b60d3c150763c8.png
相关 android 蓝牙开发 1. AndroidManifest.xml里面加入权限 <!--允许程序连接到已配对的蓝牙设备--> <uses-permission android:n 深藏阁楼爱情的钟/ 2022年12月17日 08:50/ 0 赞/ 237 阅读
相关 android 蓝牙BLE 直接上代码吧,完整的程序代码如下: 首先是MainActivity,本段代码完成了子模转换和保存数据的功能,并将要发送的数据整理成了和作者的小伙伴说好的格式。需要注意的是, ゞ 浴缸里的玫瑰/ 2022年08月22日 04:55/ 0 赞/ 332 阅读
相关 Android 蓝牙学习 学习缘由 上个礼拜公司要开发个简单的五子棋游戏!其中一个需求就是支持蓝牙对战!所以苦逼的我学习蓝牙方面的知识了! 简介 Bluetooth是目前使用最广泛的 超、凢脫俗/ 2022年08月02日 05:55/ 0 赞/ 284 阅读
相关 android 蓝牙文件 利用android 传送文件需要解决一下几个问题。 1,发送方选中文件时如何获取文件地址? 以下这段代码作用是返回你选择文件的uri,因此你要重写 onActivityR 冷不防/ 2022年07月14日 10:27/ 0 赞/ 265 阅读
相关 Android手机蓝牙总结之传统蓝牙 出处:[Android手机蓝牙总结之传统蓝牙][Android] 最近,公司有一个项目时关于手机蓝牙和硬件蓝牙相互通信的需求。基于之前很久没有学习硬件的知识,这次记录下来,以 ゝ一纸荒年。/ 2022年05月18日 08:57/ 0 赞/ 699 阅读
相关 Android实现蓝牙耳机连接 > 代码地址如下: > [http://www.demodashi.com/demo/13259.html][http_www.demodashi.com_demo_132 矫情吗;*/ 2022年05月12日 08:26/ 0 赞/ 564 阅读
相关 Android 实现蓝牙录音 \Android 实现蓝牙录音 本文实现使用AudioRecord 来进行蓝牙录音。 主要是通过打开蓝牙SCO通路实现。 这里不考虑连接蓝牙问题,要确保蓝牙连接成功。 客官°小女子只卖身不卖艺/ 2022年04月25日 03:02/ 0 赞/ 1039 阅读
相关 Android 通信--蓝牙 分享一下我老师大神的人工智能教程!零基础,通俗易懂![http://blog.csdn.net/jiangjunshow][http_blog.csdn.net_jiangju 深碍√TFBOYSˉ_/ 2022年04月17日 04:11/ 0 赞/ 358 阅读
相关 android蓝牙开发 分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来![https://blog.csdn.net/jiangjuns 拼搏现实的明天。/ 2022年03月16日 00:52/ 0 赞/ 433 阅读
相关 Android蓝牙操作 蓝牙是一种支持设备短距离传输数据的无线技术。android在2.0以后提供了这方面的支持。 从查找蓝牙设备到能够相互通信要经过几个基本步骤(本机做为服务器): 1. 小鱼儿/ 2021年11月27日 07:50/ 0 赞/ 353 阅读