代码地址如下:
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);

当应用退出或者进程被杀死后,重新进入应用时会加载原先已连接的蓝牙设备。

   /*** 获取到保存的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;}

断开设备:

/*** 断开当前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大师发表,拒绝转载,转载需要作者授权

Android蓝牙A2DP连接实现相关推荐

  1. android 蓝牙自动断开,Android蓝牙:连接()/断开()

    我目前正在设计一个应用程序,它需要连接到设备,写入/读取数据,并可靠地关闭连接.目前我有写/读固体.我的断开连接然后重新连接非常不可靠,并且经常实际上使手机崩溃.我一直在寻找通过大量文章试图弄清楚和. ...

  2. android 蓝牙自动连接,蓝牙自动连接实现

    实现的主要功能(蓝牙配对成功如何与远程设备一直连接) 1.当蓝牙配对成功连接时,断开远程端设备会自动连接 2.当设备长时间锁屏会导致CachedBluetoothDevice自动清空,如果蓝牙断开就不 ...

  3. Android 蓝牙 A2dp 听歌卡音?audio数据到a2dp通道流程解析----A2dp流控原理(Acl Flow Control),一文搞懂蓝牙卡音问题处理

    同学,别退出呀,我可是全网最牛逼的 Android 蓝牙分析博主,我写了上百篇蓝牙文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦. 本文章将卡音 ...

  4. Android 蓝牙 A2DP基础概念、A2DP音频流的建立及传输流程、A2DP播放暂停音乐命令交互过程分析 - 史上最全分析

    同学,别退出呀,我可是全网最牛逼的 Android 蓝牙分析博主,我写了上百篇蓝牙文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦. Androi ...

  5. android 实现蓝牙自动配对连接,Android实践 -- Android蓝牙设置连接

    蓝牙开发相关 使用Android Bluetooth APIs将设备通过蓝牙连接并通信,设置蓝牙,查找蓝牙设备,配对蓝牙设备 连接并传输数据,以下是Android系统提供的蓝牙相关的类和接口 Blue ...

  6. Android 蓝牙 A2dp 编码SBC、AAC、Aptx、LDAC、LHDC aduio音频概述(2)

    android-蓝牙A2dp-avrcp-hfp-opp-配对流程-ble-rfcomm源码流程-点击下载 Android 蓝牙A2dp-Avrcp初始化-连接-播放源码分析文档大全-点击下载 同学, ...

  7. Android 蓝牙 A2dp 编码SBC、AAC、Aptx、LDAC、LHDC aduio音频概述(1)

    同学,别退出呀,我可是全网最牛逼的 Android 蓝牙分析博主,我写了上百篇蓝牙文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦. androi ...

  8. Android 蓝牙A2dp 协议流程(一)

    同学,别退出呀,我可是全网最牛逼的 Android 蓝牙分析博主,我写了上百篇蓝牙文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦. a2dp(A ...

  9. android 蓝牙串口连接不上,安卓手机搜索不到蓝牙模块HC-06,是怎么回事?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 问题0010:蓝牙串口模块使用的正确步骤 很多人现在都开始使用蓝口模块,利用手机蓝牙或者PC蓝牙进行控制单片机系统.但是很多人一上来就直接把蓝牙模块和单片 ...

最新文章

  1. 遗传算法介绍和遗传算法的python实现
  2. Python3赋值运算符
  3. LDAP用户验证(Spring-LDAP)
  4. 关于tornado的异步耗时操作假设
  5. 网络的可靠性nyoj170
  6. 用户DSN、 系统DSN 、文件DSN
  7. UE3采用多进程编译Shader
  8. 将SQL Server数据库备份到多个文件或从多个文件还原
  9. 关于SQL SERVER 2005 开发版
  10. 《软件方法》第8章 分析 之 分析类图——知识篇Part1(20211029更新)
  11. kewail node 短信_node.js短信接口_node.js发短信_node.js短信验证码_验证码短信代码示例_互亿无线...
  12. 字符串的concat方法_字符串concat()方法
  13. 关于STM32F107移植到GD32F307后,固件不断重启的一个解决方式
  14. Win10系统SAS9.4安装步骤
  15. PostgreSQL获得去、今、明年份、今年的第一天、去年的第一天转换时区、最后一天等
  16. windows易升_直播用“易升”工具升级至Windows10 2020年5月更新
  17. ds18b20温度报警C语言程序,单片机中使用DS18B20温度传感器C语言程序(参考4)
  18. 计算机毕业设计JAVA图书个性化推荐系统mybatis+源码+调试部署+系统+数据库+lw
  19. sas sql中有类似mysql的格式_[转载][Base SAS] SAS SQL语句函数
  20. 直扩 单音干扰抑制 matlab,单频干扰在直扩系统中的误码性能分析

热门文章

  1. python微控制器编程从零开始 豆瓣_从零开始(什么是编程)认识python
  2. navmenu 收起没有动画 element_ABC360等3家英语动画片课程测评:用动画片学英语不靠谱?...
  3. arm交叉编译jsoncpp
  4. ffmpeg 视频的剪切
  5. 7006.vue项目之电商项目实战1-环境搭建及后台接口测试
  6. mysql not exists优化_MySQL优化--NOT EXISTS和LEFT JOIN方式差异
  7. 力扣21.合并有序链表
  8. Redis模式对比:主从模式 VS 哨兵sentinel模式 VS Redis cluster模式
  9. 浅入深出Vue:注册
  10. Luke的各版本下载