代码地址如下:

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实践 -- Android蓝牙设置连接

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

Android蓝牙A2dp profile的使用

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

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

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

Android蓝牙——HID开发

android蓝牙a2dp切换歌曲广播,Android蓝牙A2DP连接实现相关推荐

  1. android本页切换子页,android ViewPager控件实现手势滑动切换页签-Fun言

    1,主布局文件 android:layout_width="match_parent" android:layout_height="match_parent" ...

  2. android无法接收短信广播,Android BroadcastReceiver接收收到短信的广播

    一.知识介绍 1.broadcastReceiver是广播接受者,四大组件之一. 2.Android中内置了很多系统级别的广播,可以在应用程序中得到各种系统的状态信息. 3.使用场景: ①当手机没有电 ...

  3. android抖音切换实现,【Android 进阶】仿抖音系列之视频预览和录制(五)

    前言 大家好,在前几篇中,我们通过2种方式实现了仿抖音的翻页切换视频,仿抖音列表播放视频功能:这一篇,我们来说说视频的录制. 主流的视频录制,一般都采用的是FFmpeg 例如 腾讯短视频,由于FFmp ...

  4. android sim卡状态改变广播,android – 如何监控SIM卡状态的变化

    当SIM状态改变时,意图android.intent.action.SIM_STATE_CHANGED被广播.例如,在我的HTC Desire配有T-Mobile SIM卡的情况下,如果我将设备置于飞 ...

  5. android 切换语言 广播,Android App 应用内多语言切换

    App用户根据自己的语言喜好,设置app语言.语言设置只针对本app,并在下次启动应用时保留前一次启动设置. 切换语言代码: sharePreferences存入设置语言: Sharencesshar ...

  6. android alarmmanager 收不到广播,android定时闹钟:Service+BroadcastReceiver+AlarmManager+NotificationManager...

    在开发android的过程中,需要一个定时提醒的功能,原本以为是一个很简单的功能,但是发现网上能找到的讲解或者代码都很或多或少地缺少一部分的设置和关键代码,所以我才注册了简书账户,分享一下. 在研究的 ...

  7. android代码里切换横竖屏,Android横竖屏切换

    Android 2.3以前的横竖屏切换: 在Android 2.3平台上,我们可以需要设置界面的横竖屏显示时,可以在AndroidManifest.xml中,对Activity的属性添加以下代码: A ...

  8. android 百度地图切换城市地图,android百度地图:卫星地图普通地图交通地图切换...

    在基础地图模式上,增加了普通图和卫星图的切换,以及是否增加交通图的图层. public class LayersDemo extends Activity { /** * MapView 是地图主控件 ...

  9. android无法接收短信广播,android – 广播接收器不适用于短信

    首先,我已经搜索了可能的解决方案,尝试了一切,但仍然无效.我肯定错过了什么. 我正在尝试创建一个接收/读取和写入SMS的应用程序. 写部分工作正常,我的广播接收器只是没有捕捉广播. AndroidMa ...

  10. android sim卡插拔广播,Android监听SIM卡插拔的方式

    监听SIM卡是否可用 import android.app.Service; import android.content.BroadcastReceiver; import android.cont ...

最新文章

  1. oracle数据库克隆工具,OracleCopier
  2. C# BackgroundWorker 的使用、封装
  3. android xml文件格式,android xml 资源文件中几个格式(@ ? @* @+)的含义
  4. Android WebView中使用loadData时出现的乱码问题解决办法
  5. 金融学习纲要与相关知识
  6. cifar10数据集测试有多少张图_基于特定数据集的Oracle、ClickHouse、ES测试报告
  7. php 开启fsockopen函数,巧用php的fsockopen函数
  8. python汉诺塔_汉诺塔递归算法/搬金盘的婆罗门 - Python实现
  9. 阿里云Redis混合存储典型场景:如何轻松搭建视频直播间系统
  10. 一个傻傻的尼姆游戏及其Python实现
  11. mysql单张表数据量极限_极限数据量范围的安全测试
  12. leetcode 链表1
  13. jsf刷新页面_JSF页面生命周期管理
  14. PHP令人困惑的strtotime
  15. 【安全测试工程师】超实用的Web渗透测试学习路线~
  16. PPT,我的视频制作利器
  17. 主数据项目交付最佳实践
  18. 【uniapp | 微信小程序】注册和开发环境搭建
  19. “为什么你们开发这么慢?” 3页ppt讲透:帕金森定律,低效正在杀死你的团队!...
  20. estimate和estimation

热门文章

  1. PE安装Win10纯净版教程【附Win10企业版/专业版/64/32位系统下载地址以及系统激活工具和解压软件安装包】
  2. 深度学习入门笔记(1)——什么是深度学习?
  3. usb驱动开发21——驱动生命线
  4. 用计算机算出身高,身高预测公式计算器靠谱吗
  5. LSTM实现股票预测
  6. 三、Sails 中使用Jwt进行身份认证
  7. HDU 4475 Downward paths (推公式)
  8. PaddleX---dEEPlABv3+语义分割
  9. 小米手机连接电脑(Mac)刷miui12开发版的操作指南
  10. 动词ing形式的5种用法_动词ing形式的5种用法