看了很多的博客文章的技术,今天也写一写自己的第一篇博客文章,我只说说如何用,具体实现的原理,原谅我不太清楚,但对于大多数人来说,知道怎么做出来就很不错了哈哈!不多说了,开始吧。

首先要知道几个类,BluetoothAdapter,BluetoothGatt,BluetoothDevice,BluetoothCattService,BluetoothCattCharacteristic。

第一个是蓝牙设配器,对蓝牙的操作都需要用到它,很重要,BluetoothGatt作为中央来使用和处理数据,使用时有一个回调方法BluetoothGattCallback返回中央的状态和周边提供的数据,BluetoothCattService作为周边来提供数据;BluetoothGattServerCallback返回周边的状态。BluetoothDevice是蓝牙设备,BluetoothCattCharacteristic是蓝牙设备的特征。

看着有点乱,我们来打个比喻:BluetoothDevice为学校,BluetoothGatt为学校到达某一个班级的通道,BluetoothCattService为学校的某一个班级,BluetoothCattCharacteristic为班级中的某一个学生。那么蓝牙连接通信的过程就是这样,BluetoothAdapter先找到学校(就是连接目的设备),再通过通道找到目标班级,最后从班级中找到目标学生,这个学生就是我们设备之间通信的中介,很重要,学校有唯一的MAC地址,班级有唯一的serviceUUID,学生有唯一的charactersticUUID(相当于学号),所以就是在一所学校找一个学生的问题,好了,应该了解了吧。

下面正是开始

1.加上蓝牙访问权限

2.打开蓝牙,两种方式,一种是询问式,一种是自动式,你百度一下就有很多,很简单,这里就不多说。

3.搜索周边的蓝牙设备

BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();

adapter.startDiscovery();//此过程会发送广播信息,我们在BroadcastReceiver中去接收即可

我这里把能搜索到的设备保存在list列表中,名字也保存在一个列表中,然后再UI界面上的listView中显示出来,就可以看到搜索到了几个蓝牙设备,名字各是什么

4.获取目的设备的MAC地址,因为我们已经搜索到很多设备,所以直接mac = device.getAddress().toString()即获取到设备的MAC地址

5.既然找到了地址,那就可以开始连接了,注意一点,连接的时候一定要先关闭上面的搜索蓝牙功能,直接adapter.cancelDiscovery就可以了

知道了MAC地址,那就可以获取到该MAC地址对应的蓝牙设备mDevice = adapter.getRemoteDevice(mac),这个mDevice就是我们的学校,

学校有了,那就要找到通道,bluetoothGatt = mDevice.connectGatt(this,false,new BluetoothGattCallback() ),bluetoothGatt就是通道,BluetoothGattCallback()是回调类,里面有很多方法,寻找班级和学生就在它的方法里面去实现。

里面有几个比较重要的方法,分别是onConnectionStateChange(),onServiceDiscovered(),onCharacteristicRead(),onCharacteristicChanged(),几个方法之间是独立的,同时又有联系的,过程是这样,连接通道时最先触发的是onConnectionStateChange()方法,在该方法里面启动服务发现后会触发onConnectionStateChange(),此方就是寻找班级和学生的重点方法,在通道通过UUID找到班级,在班级通过UUID找到学生,每个设备有多个班级UUID,每个班级对应多个学生UUID,所以你可以先打印出来这些信息,获取有用的班级UUID和学生UUID,找到了学生,就可以发出通知了,即把学生通知出去,上面说了学生只是一个通信的中介,此时会触发onCharacteristicChanged()方法,在该方法里面就可以获取到设备那边传过来的数据包了,另外onCharacteristicRead()方法被触发的前提是要在onServiceDiscovered()里面执行readCharacteristic()方法,然后就可以在onCharacteristicRead()里面做自己想要的操作了,整个过程就是这样,下面给出这个过程的完整代码:

蓝牙连接通信有两种形式,一种是通过socket的形式,另一种就是我这篇文章写的通过MAC地址来实现的,对于数据包的解析就靠你们自己了,这个需要蓝牙协议的,每个协议都不同,解析的过程也不同,在这里无法讲,主要是对数据包的结构要熟悉,这样的话就基本不成问题了。

好了,第一篇博客就写这么多,谢谢你们的阅读!

关注公众号:小陆小陆认真点    回复“蓝牙”即可立即获得源码,或者评论区留下邮箱,我看到了会发给你^_^

android蓝牙连接通信的实现相关推荐

  1. Android 蓝牙串口通信工具类 SeriaPortUtil 2.0.+

    原文地址:https://www.shanya.world/archives/2fd981ea.html SerialPortUtil 提示 最新版本 3.0.+ 已发布,其对比 2.0.+ 版本,A ...

  2. android连接蓝牙耳机,蓝牙耳机厂家:Android蓝牙连接的一些心得

    蓝牙耳机厂家最近做一个项目,主要是给蓝牙发送指令的,boss要求能够最快速度的搜索到蓝牙,并且发送数据. 刚开始也遇到很多133,各种断开连接的问题.android蓝牙搜索有两种方式,一种startL ...

  3. android蓝牙连接133问题的解决办法---(连接篇)

    上一篇文章介绍了"蓝牙扫描",今天来说一下android蓝牙连接过程中133的问题: 我们经常在网上看到一些答案说需要释放gatt资源,这种方式可以在一定程度上减少出现133的概率 ...

  4. Android蓝牙无法通信,android.bluetooth.BluetoothSocket无法连接

    我已经尝试了其他评论中的所有建议,但都没有效果,我希望有人能帮助我.我已经为这个问题挣扎了三天了.我确信我的uuid是正确的,并且我知道清单中启用了蓝牙访问. 我正在尝试将我的android应用程序连 ...

  5. Android 蓝牙连接

    一.概述 蓝牙是一种无线技术标准,可实现固定设备.移动设备和楼宇个人域网之间的短距离数据交换.最多可以同时和7个其它蓝牙设备建立连接,进行通信.蓝牙可分为两大类:传统蓝牙(蓝牙3.0规范之前),低功耗 ...

  6. 关于Android蓝牙串口通信那点破事

    Android蓝牙串口通讯 闲着无聊玩起了Android蓝牙模块与单片机蓝牙模块的通信,简单思路就是要手机通过蓝牙发送控制指令给单片机,并作简单的控制应用.单片机的蓝牙模块连接与程序暂且略过,此文主要 ...

  7. Android蓝牙连接问题总结

    最近开始接触Android的蓝牙设备问题,严格意义上来说,也算是第二次接触蓝牙机制了,之前对于蓝牙设备的整个过程,也不是太了解,只是接触了一些自己需要的部分.而这次应该算是比较深入的了解了蓝牙机制的部 ...

  8. Android 蓝牙连接(简单简单版)

    该博客只是记录,不会详细说明(本人技术有限不会说) 一:声明蓝牙权限和定位权限 <!--蓝牙权限--> <uses-permission android:name="and ...

  9. android蓝牙连接取消后怎么重新连上,重新启动后接收蓝牙连接更改

    我试图与接收器一起检查与不同设备的蓝牙连接,然后将其记录在logcat中.它适用于正常情况,但在重新启动时会失败.重新启动后接收蓝牙连接更改 这是一个正常的工作流程: 手机上 切换蓝牙开/关 重启手机 ...

最新文章

  1. ZeroMQ接口函数之 :zmq_poll - I/O多路技术
  2. django--favicon.ico
  3. 天谕手游与奥特曼联手,玩家看到有多么激动?
  4. JavaScript可否多线程? 深入理解JavaScript定时机制
  5. SIP应答消息状态码与功能
  6. 系统架构设计师 - 软件架构设计 - 架构评估
  7. jQuery教程04-jQuery_this选择器
  8. 【Navicat】Navicat数据格式化显示设置
  9. 马拉松教会我_社区教会了我关于开放组织的知识
  10. PyPA Packaging Python Projects
  11. php强大的函数,PHP最强大的随机字符串生成函数
  12. Hibernate中常见问题 No row with the given identifier exists问题
  13. 怎么修改地磅服务器的修改记录,地磅无人值守系统软件怎么修改数据
  14. 【8.16校内测试】【队列】【数学】【网络流/二分图最大匹配】
  15. docker search oracle,Docker search 命令
  16. 无线AP和无线路由器区别 wifi热点
  17. 一文整理总结常见Java后端面试题系列——Spring篇(2022最新版)
  18. python mysql跨库查询_Python查询mysql库
  19. java smtp.126.com_java实现邮件发送
  20. Windows 10 2018年四月更新版官方正式版

热门文章

  1. iterm通过代理访问网络
  2. Linux嵌入式学习过程
  3. 三星s20 android 10.0,同为骁龙865新旗舰,小米10对比三星S20,差距有多大
  4. matlab安装方法以及在重复弹出mathwoks software activation界面的解决办法(需要的license.lic文件内容)
  5. 数学建模拿到题目时思路
  6. pikachu站点所有问题
  7. PYTHON通过psutil模块实时监测cpu、内存、网速运行情况
  8. USB接口波形发生器
  9. html制作在线视频音乐播放器,用html5制作音乐播放器,这3款就足够了!
  10. WebVR简介和常用资源链接