你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
首页
热门
推荐
精选
登录
|
注册
Android蓝牙A2DP连接实现
立即下载
用AI写一个
金额:
2
元
支付方式:
友情提醒:源码购买后不支持退换货
立即支付
我要免费下载
发布时间:2018-12-06
123人
|
浏览:12043次
|
收藏
|
分享
技术:Android+java+bluetooth
运行环境:androidstudio+android手机
概述
Android手机上实现连接/断开蓝牙耳机A2DP
详细
## 开发环境: 开发工具: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具体要看蓝牙产品制造商是否使用这个技术 ## 代码介绍 代码结构如下 ![](/contentImages/image/20181206/mB4Q16mLDbNGEwY1dNa.png) 本应用共包含五个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()); } } ``` 具体代码参考源码,谢谢。 备注,加载已连接的蓝牙设备是只针对该应用,也就是说只加载在该应用中进行连接的设备,对于通过设置连接的设备,不做处理。 本应用只是提供一个雏形,更多功能需求还需要自己去完善 ## 功能演示 开启蓝牙 ![](/contentImages/image/20181206/qDfU05rYv27nhTf9D6s.png) 开启扫描并过滤扫描结果 ![](/contentImages/image/20181206/pXgDHP4mRW9LXiyLrXl.png) 发起连接,在发起连接时,系统会自动为其进行配对操作 ![](/contentImages/image/20181206/Mqpe3K0LcLXKS9zarn3.png) 连接成功显示 ![](/contentImages/image/20181206/aaCHAlzslFlwC1jycrI.png) 在杀死应用或者重启手机,重新进入应用时依旧可以看到已连接的设备
本实例支付的费用只是购买源码的费用,如有疑问欢迎在文末留言交流,如需作者在线代码指导、定制等,在作者开启付费服务后,可以点击“购买服务”进行实时联系,请知悉,谢谢
感谢
5
手机上随时阅读、收藏该文章 ?请扫下方二维码
相似例子推荐
评论
作者
zpengyong
15
例子数量
3604
帮助
125
感谢
评分详细
可运行:
4.5
分
代码质量:
4.5
分
文章描述详细:
4.5
分
代码注释:
4.5
分
综合:
4.5
分
作者例子
基于FFmpeg的音频编码(PCM数据编码成AAC android)
Android基于TCP的局域网聊天通信
Android 进程间通信——Service、Messenger
AsyncTask 异步任务基本使用-下载视频
Android IntentService使用
Android HandlerThread详解
Eclipse集成ijkplayer并实现本地和网络视频播放等
Android WiFi开发
Android -传统蓝牙通信聊天
Android 进程间通信——AIDL
Android -BLE蓝牙小DEMO
Android蓝牙——HID开发
Android8.0及以上系统 WiFi热点 版本适配
Android WiFi直连 双向通信
Android蓝牙A2DP连接实现