代码地址如下:
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大师代发,拒绝转载,转载需要作者授权

Android蓝牙A2DP连接实现的更多相关文章

  1. Android实践 -- Android蓝牙设置连接

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

  2. Android蓝牙A2dp profile的使用

    A2dp profile是android支持的一种蓝牙情景模式,一般用于蓝牙立体声耳机,即蓝牙音频的输出 在android的app层中,A2dp的使用并不是很开放,api只提供了非常少的操作接口,连基 ...

  3. android开发之蓝牙配对连接的方法

    最近在做蓝牙开锁的小项目,手机去连接单片机总是出现问题,和手机的连接也不稳定,看了不少蓝牙方面的文档,做了个关于蓝牙连接的小结. 在做android蓝牙串口连接的时候一般会使用 ? 1 2 3 4 5 ...

  4. Android蓝牙——HID开发

    代码地址如下:http://www.demodashi.com/demo/13891.html 原文地址: https://blog.csdn.net/VNanyesheshou/article/de ...

  5. Android 8 蓝牙 A2DP流程

    记录一下蓝牙A2DP的流程 packages\apps\Settings\src\com\android\settings\bluetooth\BluetoothPairingDetail.java ...

  6. Android 蓝牙开发之A2DP基本功能

    本文主要是Android做为Audio Source端,A2DP的基本操作:包括连接.断开连接.设置优先级.获取优先级.获取A2DP连接状态.获取A2DP连接的设备列表等功能. 1.简介 Audio ...

  7. Android蓝牙BLE开发,扫描、连接、发送和读取信息;

    1.BLE开发权限 Android蓝牙BLE开发须打开蓝牙权限和6.0位置权限: <uses-permission android:name="android.permission.B ...

  8. Android 蓝牙开发之搜索、配对、连接、通信大全

            蓝牙( Bluetooth®):是一种无线技术标准,可实现固定设备.移动设备和楼宇个人域网之间的短距离数据 交换(使用2.4-2.485GHz的ISM波段的UHF无线电波).蓝牙设备最 ...

  9. Android蓝牙线控切歌、连接状态监听(无线耳机也适用)

    1. 监听蓝牙设备(音频)连接状态 所有代码已测试在Android11也能正常使用 (Android SDK 30) 首先新建一个广播类 BluetoothStateReceiver /** * @a ...

随机推荐

  1. 利用Mircosoft URLRewriter.dll实现页面伪静态

    一,获得Mircosoft URLRewriter.dll: 获得Mircosoft URLRewriter.dll可以到http://www.microsoft.com/china/msdn/lib ...

  2. OBjective-C:文件管理类NSFileManager

    文件管理类NSFileManager类:对文件进行创建.复制.重命名.删除等,一般不对文件内容进行操作. NSData类和NSMutableData类:相当于数据缓冲区  NSFileManager是 ...

  3. 混沌数学之Arnold模型

    相关软件混沌数学之离散点集图形DEMO 相关代码: class ArnoldEquation : public DiscreteEquation { public: ArnoldEquation() ...

  4. Cesium应用篇:1快速搭建 【转】

    范例中所有范例可以在Github中搜索:ExamplesforCesium Cesium ['siːzɪəm]是一款开源的JavaScript开源库,开发者通过Cesium,实现无插件的创建三维球和二 ...

  5. IOS之NSFileManager 和NSFileHandle

    在现阶手机app的临时缓存文件渐渐增多,在app开发中对于移动设备文件的操作越来越多,我们IOS中对于文件的操作主要涉及两个类NSFileManager 和NSFileHandle,下面我们就看看如何 ...

  6. (转)Unity3D新手引导开发手记

    转自:http://www.cnblogs.com/ybgame/p/3844315.html 最近开始接手新手引导的开发,记录下这块相关的心得 首先客户端是Unity,在接手前,前面的同学已经初步完 ...

  7. 火狐浏览器Firefox如何使用插件,火狐有哪些好用的插件

    1 CoorPreviews 不打开网页链接预览该网页的内容. 预览如图所示: 点击关闭旁边的钉子可以让该窗口保持开着并且浏览速度加快.这对于快速浏览图片时非常有用. 2 FoxTab 3D方式预览网 ...

  8. Android动态加入控件约束位置

    用LayoutParams: RelativeLayout insertLayout = (RelativeLayout)view1.findViewById(R.id.screen);//scree ...

  9. android kernel控制台初始化过程

    对于我们的android平台,控制台被定义到了串口1上,因此初始化过程就是把控制台的输出配置到串口1上 对kernel控制台初始化是在挂载文件系统之前,由于没有串口的设备文件,不能通过打开设备文件来访 ...

  10. iOS日期加减

    - (NSDate *)jsDateFromBeginDate:(NSDate *)beginDate todays:(int)days { NSDate *dateTemp = [[NSDate a ...