代码地址如下:
http://www.demodashi.com/demo/14624.html

开发环境:

开发工具:Androidstudio
适配机型:honor8(Android6.0), 坚果R1(Android8.0)
开发功能:Android中蓝牙连接A2DP设备,蓝牙耳机设备

功能实现:

本应用提供以下功能:
第一:开启蓝牙
第二:查找过滤掉A2DP设备
第三:连接A2DP设备
第四:断开连接A2DP设备
第五:保存通过本应用连接的A2DP设备
第六:当重新启动应用时加载已连接的设备

A2dp介绍

A2DP全名是Advanced Audio Distribution Profile 蓝牙音频传输模型协定。 A2DP是能够采用耳机内的芯片来堆栈数据,达到声音的高清晰度。然而并非支持A2DP的耳机就是蓝牙立体声耳机,立体声实现的基本要求是双声道,所以单声道的蓝牙耳机是不能实现立体声的。声音能达到44.1kHz,一般的耳机只能达到8kHz。如果手机支持蓝牙,只要装载A2DP协议,就能使用A2DP耳机了。还有消费者看到技术参数提到蓝牙V1.0 V1.1 V1.2 V2.0——这些是指蓝牙的技术版本,是指通过蓝牙传输的速度,他们是否支持A2DP具体要看蓝牙产品制造商是否使用这个技术

代码介绍

代码结构如下

本应用共包含五个java文件:
Constants:常量值定义文件
Utils:工具类,包含log包装,toast包装,以及sharedpreference的包装
DeviceBean:封装BluetoothDevice, 包含device信息
DeviceListAdapter:ListView的适配器,其中有对list列表,按钮点击事件的处理
DeviceListActivity:应用中的唯一UI界面

其中readMe为说明文件

开启蓝牙代码:
向系统发送请求,开启蓝牙,该过程会请求用户同意开启蓝牙
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

接下来开启蓝牙扫描,
btAdapter.startDiscovery();

在扫描过程中过滤掉非A2DP的设备
if (btClass.getMajorDeviceClass() != BluetoothClass.Device.Major.AUDIO_VIDEO) { /**本demo只处理a2dp设备,所以只显示a2dp,过滤掉其他设备*/ break; }

之后点击界面的connect按钮连接对应设备
Method method = BluetoothA2dp.class.getMethod("connect", new Class[]{BluetoothDevice.class}); method.invoke(bluetoothA2dp, device);

在连接成功后可以断开对应设备
Method method = BluetoothA2dp.class.getMethod("disconnect", new Class[]{BluetoothDevice.class}); method.invoke(bluetoothA2dp, device);

当应用退出或者进程被杀死后,重新进入应用时会加载原先已连接的蓝牙设备。
java /** * 获取到保存的a2dp连接 * @param context * @return */ static DeviceBean fetchConnectedDevice(Context context){ DeviceBean deviceBean = null; SharedPreferences sharedPreferences = context.getSharedPreferences( Constants.PREF_CONNECTED_DEVICE, Context.MODE_PRIVATE); String name = sharedPreferences.getString(Constants.PREF_DEVICE_NAME, null); String address = sharedPreferences.getString(Constants.PREF_DEVICE_ADDRESS, null); if (address != null) { deviceBean = new DeviceBean(); deviceBean.setName(name == null ? address : name); deviceBean.setAddress(address); deviceBean.setState(BluetoothAdapter.STATE_CONNECTED); } return deviceBean; }
断开设备:
java /** * 断开当前a2dp设备 * * @param device device */ private void disconnectA2dp(BluetoothDevice device) { if (bluetoothA2dp == null || device == null) { return; } try { Method method = BluetoothA2dp.class.getMethod("disconnect", new Class[]{BluetoothDevice.class}); method.invoke(bluetoothA2dp, device); } catch (IllegalAccessException e) { e.printStackTrace(); Utils.logE(TAG, e.getMessage()); } catch (InvocationTargetException e) { e.printStackTrace(); Utils.logE(TAG, e.getMessage()); } catch (NoSuchMethodException e) { e.printStackTrace(); Utils.logE(TAG, e.getMessage()); } }
具体代码参考源码,谢谢。

备注,加载已连接的蓝牙设备是只针对该应用,也就是说只加载在该应用中进行连接的设备,对于通过设置连接的设备,不做处理。

本应用只是提供一个雏形,更多功能需求还需要自己去完善

功能演示

开启蓝牙

开启扫描并过滤扫描结果

发起连接,在发起连接时,系统会自动为其进行配对操作

连接成功显示

在杀死应用或者重启手机,重新进入应用时依旧可以看到已连接的设备Android蓝牙A2DP连接实现

代码地址如下:
http://www.demodashi.com/demo/14624.html

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

最新文章

  1. 【面试题】HWL
  2. CentOS7 修改系统时间
  3. C#初入串口通信(串行通信)总结
  4. OWASP-ZAP
  5. JavaScript—window对象使用
  6. Android 数据库读取数据显示优化 Application [6]
  7. PAT (Advanced Level) 1042. Shuffling Machine (20)
  8. USACO Section 1.3 Barn Repair 解题报告
  9. OpenCV探索之路(八):重映射与仿射变换
  10. MySQL 水平拆分(读书笔记整理)
  11. 线性表 linear_list 顺序存储结构
  12. swing JTable
  13. Python爬虫9-request包介绍及应用
  14. 记一次线上Java程序导致服务器CPU占用率过高的问题排除过程
  15. 马拉车算法——求回文子串个数zoj4110
  16. 从svn迁移至Git并保留所有 commit 记录
  17. RTSP-RTMP-HLS媒体播放管理
  18. Filebeat简介
  19. 微信小程序silk格式转码成mp3格式
  20. DOCKER解析(转)

热门文章

  1. LR杂记-nmon+analyser监控linux系统资源
  2. rman多通道全备份脚本
  3. Windows Server 2003 R2 IIS服务的命令行方式重启命令
  4. 【BZOJ】【2127】happiness
  5. 我所遭遇过的游戏中间件--Havok
  6. Navicat Premium 12全系列
  7. libevent的hello world程序
  8. Informatica 常用组件Lookup缓存之二 使用永久查找高速缓存
  9. Geolocation地理定位
  10. 有关String的转换的一篇好文章