2022.4.18

一 、Bluetooth结构
1、JAVA层
bluetooth的JAVA类    frameworks/base/core/java/android/bluetooth/           
2、JNI层
frameworks/base/core/jni/android_bluetooth_开头的文件
bluez通过JNI到上层的接口
frameworks/base/core/jni/android_server_bluetoothservice.cpp
调用硬件适配层的接口system/bluetooth/bluedroid/bluetooth.c
3、bluez库
external/bluez/
bluez用户空间的库,开源的bluetooth代码,包括很多协议,生成libbluetooth.so。
4、硬件适配层
system/bluetooth/bluedroid/bluetooth.c     对硬件操作的接口
system/bluetooth/data/*                          一些配置文件,复制到/etc/bluetooth/ 
还有其他一些测试代码和工具。

二、Bluetooth开发涉及的4种类

1、BluetoothAdapter,蓝牙适配器,可判断蓝牙设备是否可用等功能。
常用12种方法列举如下(字母顺序):
cancelDiscovery() ,  取消搜索过程,在进行蓝牙设备搜索时,如果调用该方法会停止搜索。(搜索过程会持续12秒)
disable()      关闭蓝牙,也就是我们常说的禁用蓝牙。
enable()      打开蓝牙,这个方法打开蓝牙无弹出提示。若让系统提示:用户是否打开蓝牙设备:加两行代码:

Intent enabler=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enabler,reCode);//同startActivity(enabler);

(从FirstActivity跳转到SecondActivity,然后返回FirstActivity并且获取从SecondActivity传回来的参数。reCode一般等于3。在AndroidManifest.xml里面添加蓝牙权限
getAddress()                  获取本地蓝牙地址
getDefaultAdapter()      获取默认BluetoothAdapter
getName()                      获取本地蓝牙名称
getRemoteDevice(String address)    根据蓝牙地址获取远程蓝牙设备

getState()     获取本地蓝牙适配器当前状态
isDiscovering()   判断当前是否正在查找设备,是则返回true
isEnabled()          判断蓝牙是否打开,是则返回true
listenUsingRfcommWithServiceRecord(String name,UUID uuid)   根据nameUUID创建并返回BluetoothServerSocket(创建BluetoothSocket服务器端的第一步)
startDiscovery()   开始搜索

2.BluetoothDevice     描述了一个蓝牙设备

常用 6种方法列举如下(字母顺序):
createRfcommSocketToServiceRecord(UUIDuuid)

根据UUID创建并返回一个BluetoothSocket(即创建BluetoothSocket
getAddress(),  getName(),使用同BluetoothAdapter
setPin  ,  createBond, cancelPairingUserInput等隐藏方法(涉及蓝牙的自动配对,需通过java的反射调用)

3.BluetoothServerSocket     是Socket
这个类有三个方法
两个重载的

accept(),  accept(inttimeout)   两者的区别后者指定了过时时间。执行这两个方法的时候,直到接收到了客户端的请求(或是过期之后),都会阻塞线程,应该放在新线程里运行!
这两个方法都返回一个BluetoothSocket,最后的连接也是服务器端与客户端的两个BluetoothSocket的连接
close()    关闭

4.BluetoothSocket   BluetoothServerSocket相对。蓝牙通讯分为server服务器端和client客户端,它们之间使用BluetoothSocket 类的不同方法来获取数据。
一共5个方法
close()                       关闭
connect()                   连接
getInptuStream()       获取输入流
getOutputStream()    获取输出流
getRemoteDevice()   获取远程设备,通过设备的mac蓝牙地址(物理地址)来获取BluetoothDevice对象

单片机蓝牙模块与手机蓝牙通信(1)相关推荐

  1. arduino nano 简单实现蓝牙模块与手机进行通信

    1.背景 目前很多通信方式都需要外附手柄,控制器,接收器,体积比较大,用起来不够方便.那么,对于距离要求不高的控制小项目,蓝牙通信一定是不二之选. 2.需要预备了解的内容 基础的编程思想和基础的C语言 ...

  2. 单片机蓝牙模块与手机蓝牙通信(6)小结

    安卓版本不同,代码细节会不同,要耐心根据提示修改调试,必要看看官方文档和百度. 明明已经调试通过,版本不同就报错问题是学习者要克服的心理最大关.前面5篇是按照2022.3月下载版本,API17. 下面 ...

  3. 实现蓝牙模块与手机进行通讯

    之前做过一个Zigbee通信的实验,需要用到蓝牙模块与手机蓝牙模块之间的通信用以接收RSSI,很长时间没有解决就收数据乱码的问题,最后无意间了解到手机蓝牙的baudrate为9600,乱码的问题也就迎 ...

  4. Android手机靠近蓝牙模块自动连接蓝牙模块,断后自动重连。也可以手机靠近手机自动连接。连接成功率百分之百,可后台运行

    BluetoothChat手机与串口模块通信靠近自动连接2.0apk示例:链接: https://pan.baidu.com/s/1YoMNNBfLTAuXm2XukG5s9g 提取码: sm3h 全 ...

  5. 基于stm32通过HC_05(ZS-040)蓝牙模块用手机控制stm32开发板上led灯的亮灭

    文章目录 前言 一.HC-05蓝牙是什么? 二.应用实例步骤 1.使用AT指令对蓝牙的初始化 2.打开手机蓝牙助手查看是否搜索到该蓝牙 3.用蓝牙模块代替TTL连接stm开发板 4.创建项目开始配置相 ...

  6. 利尔达e95蓝牙模块程序_Arduino使用HC05蓝牙模块与手机连接

    通过本文,可以了解到以下内容: 进入 AT 模式进行蓝牙基本参数设置 Arduino 蓝牙控制 LED 电路设计以及代码编写 利用 Andorid 蓝牙串口调试软件测试功能 进入 At 模式进行蓝牙基 ...

  7. Arduino使用HC05蓝牙模块与手机连接

    通过本文,可以了解到以下内容: 进入 AT 模式进行蓝牙基本参数设置 Arduino 蓝牙控制 LED 电路设计以及代码编写 利用 Andorid 蓝牙串口调试软件测试功能 进入 At 模式进行蓝牙基 ...

  8. arduino nano 蓝牙_Arduino使用HC05蓝牙模块与手机连接

    通过本文,可以了解到以下内容: 进入 AT 模式进行蓝牙基本参数设置 Arduino 蓝牙控制 LED 电路设计以及代码编写 利用 Andorid 蓝牙串口调试软件测试功能 进入 At 模式进行蓝牙基 ...

  9. 10分钟完成蓝牙模块与手机之间的数据读写交互

    经过多年的发展,蓝牙技术已经渗透到了我们生活中的各个领域,比如消费领域的可穿戴.工业领域的抄表.汽车领域的蓝牙网络控制等等,作为物联网技术的一大核心,其实上手起来非常快,下面我们一起来探讨一下如何使用 ...

  10. 智能物联网有哪些应用场景?_串口WiFi模块,蓝牙模块,WiFi+蓝牙组合模块

    文章目录 前言 一.智能家居 二.智能交通 三.智慧农业 四.智能制造 五.智慧物流 六.智慧能源 七.智能医疗 八.智能安防 九.智慧建筑 十.智能零售 无线模块及应用方案 前言 物联网从萌芽到彷徨 ...

最新文章

  1. R语言计算杰卡德相似系数(Jaccard Similarity)实战:自定义函数计算Jaccard相似度、对字符串向量计算Jaccard相似度、将Jaccard相似度转化为Jaccard距离
  2. 使用openssl生成rsa公钥和私钥
  3. html 树形图可拖拽,HTML5拖拽API实现vue树形拖拽组件
  4. 【debug】python打包成exe,太大了该怎么解决?
  5. redis scan命令详解
  6. awk去除行首行尾空格
  7. Atitit doc mng 文档管理总结目录1. 主要几大内容 12. 存储管理 22.1. 一般来说 ,文档存储在IM网盘note邮箱blog wiki等地 22.2. 文档格式与体
  8. 绑定事件和解绑事件的方法
  9. jQuery对象和DOM对象的区别
  10. 汽车销售管理系统源码
  11. java开发学生管理系统
  12. PyTorch中的pack_padded_sequence和pad_packed_sequence
  13. CSDN页面上方广告条太烦人?js写个油猴脚本给它隐藏了~
  14. 30A的MOS现在价格都下探到1块了,为什么你还在用继电器?
  15. win10资源管理器窗口无法缩小
  16. Nature Genetics:华中农业大学严建兵团队合作揭示玉米和玉米的“父辈”如何适应环境进化...
  17. Ant批量打包工具的使用
  18. Keras中predict()方法和predict_classes()方法的区别
  19. 如何设置自定义任务栏图标_轻松自定义Windows 7任务栏图标
  20. return 不能跳出 forEach 循环

热门文章

  1. 服装企业三步走向PLM,致力提升价值的时尚品牌
  2. 第五代通信技术简单概述
  3. 按键精灵打怪学习-自动寻路回打怪点
  4. mac上文字识别(Tesseract-OCR for mac )
  5. 小马激活工具对比暴风激活工具
  6. 数字信号处理(matlab版)(第3版) pdf,数字信号处理-(第3版)-(MATLAB版)
  7. Eucalyptus使用注意事项
  8. 2.6 数值分析: 追赶法
  9. 基于关系推理的自监督学习无标记训练
  10. 【交换安全】DAI - Dynamic ARP Inspection 详解/arp欺骗/gratuitous arp