一、简介:
此文档主要是介绍蓝牙双向通讯sdk的调用方法以及蓝牙双向传输的核心功能逻辑,用户可以根据需要自定义协议进行蓝牙双向通讯
二、SDK接入步骤:
1: 增加sdk库依赖:
a)libs文件夹下增加sdk依赖库
b)应用app目录下gradle文件增加如下代码:      
2:权限申请
//要申请的权限
private String[] mPermissions = {Manifest.permission.BLUETOOTH, Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION};
3: 蓝牙基本信息初始化:
a)参数:
参数1. 上下文环境 
参数2. 回调callback
参数3.是否是作为被连接端(true ? 被连接端 :连接端)
b)callback回调
callback result -> 获取初始化默认蓝牙连接的状态
callback notify -> 获取实时可搜索到的蓝牙设备信息
4: 蓝牙连接:
a) 参数
参数1:蓝牙Mac地址,可从上面方法的列表项获取
参数2:回调callback【蓝牙连接成功与否】
5: 蓝牙数据接收
5.1【蓝牙设备作为主动连接端】
a)串口持续接收所有数据【前提是蓝牙连接成功】
b) 解析有效数据【数据域】--> 数据类型可自定义
c)有效数据的传输类型【根据需要自定义】,例如,如下这样形式:
5.2:【 蓝牙设备作为被连接端】
a) 初始化方法最后一个参数要传入true
b) 蓝牙被连接【方法和5.1不一样,但回调里面的处理(5.1.a/5.1.b/5.1.c)一致】
7: 蓝牙数据发送:
a)参数
参数1:需要发送的数据【String类型】
参数2:发送数据传输的类型【自定义】【和上面接收端的类型相互协定匹配好即可】
b) 数据源的监听:【可不加】【方便调试】
三、Sdk核心功能介绍:
Sdk核心功能主要包含:蓝牙设备获取、蓝牙连接、蓝牙数据发送(封包)、蓝牙数据接收(解包)
1.蓝牙设备获取:
a)注册蓝牙相关的广播
b) 监听BluetoothDevice.ACTION_FOUND
2.蓝牙连接:
android 蓝牙之间可以通过SDP协议建立连接进行通信,通信方式类似于平常使用socket。
蓝牙连接分为连接端和被连接端,这两边的处理有一定区别:
a)连接端:
关键在于获取BluetoothSocket,而不同平台或不同芯片厂商的获取方式有一定区别,但无外乎以下两种:
(1)mBtSocket = bluetoothDevice.createInsecureRfcommSocketToServiceRecord(uuid);
(2)mBtSocket = (BluetoothSocket) bluetoothDevice.getClass().getMethod(
"createRfcommSocket",new Class[]{int.class}).invoke(bluetoothDevice, 1);
除此之外,socket的连接方法需要放到新的线程处理,不然会有很大概率被串口占用,导致连接失败
下面是蓝牙连接方法:
b)被连接端【或服务端】:
需要注意被连接端与连接端的处理机制有所区别,被连接端的蓝牙的socket获取方法如下:
{  
BluetoothAdapter中提供了两种创建BluetoothServerSocket 方式,
如下注释的为创建安全的RFCOMM Bluetooth socket,该连接是安全的需要进行配对。
而通过listenUsingInsecureRfcommWithServiceRecord创建的
RFCOMM Bluetooth socket是不安全的,连接时不需要进行配对。
其中的uuid需要服务器端和客户端进行统一
}
mServerSocket通过accept()等待客户端的连接(阻塞),直到连接成功或失败。
最终需要拿到的是上图的mBtSocket.
3.蓝牙数据发送:
蓝牙发送的核心在于拿到蓝牙连接成功后的Socket,然后获取输入、输出流。
通过输入流的write方法进行写入;
但为了数据的合理解析,需要增加封包的过程【与解包相对应】;
a)发送接口方法:
b)封包:
封包就是将数据源通过和接收端商量协定好规则,根据一定的格式进行数据封装
封包方法:【7E头、数据长度(占两个字节)、数据类型、数据域、7E尾】
4.蓝牙数据接收:
通过输入流的read方法进行写入,通过协议规则进行解包【与封包相对应】;
a)接收接口方法:
b)解包方法:【最终解析出数据域以及数据类型】
c)数据域解析
最终释放一个<key,value>的哈希值给用户,用户通过协议规则通过数据类型进行解析有效数据:
d) 根据数据类型处理有效数据:
demo 以及 sdk下载链接:
链接:https://pan.baidu.com/s/1RL2EMKi253TYXmgOTxnMYw
提取码:x4f9

蓝牙双向通讯【可自定义协议】SDK相关推荐

  1. 微信小程序控制硬件第17篇 : 腾讯连连小程序通过LLSync蓝牙协议控制安信可PB-02模组,无需网络实现蓝牙本地通讯。(附带源码)

    文章目录 前言 一.注册腾讯物联开发平台设备 新建项目 新建产品 创建数据模板 选择设备开发方式 交互开发配置 新建设备 二.设备端操作 硬件简介与连接 准备软件环境 工程目录 烧录步骤 三.腾讯连连 ...

  2. 上下位机通讯协议_嵌入式中自定义协议的一些典型例子

    关于自定义协议,对于会的人很简单,对于不会的人就摸不着头脑.下面分享一些关于自定义协议的笔记. 什么是协议? 协议这个概念我觉得挺杂的.就像嵌入式的概念一样,说法不一,比如大家常常争论FPGA是不是嵌 ...

  3. 安卓通讯之《蓝牙单片机通讯助手》②扫描设备、连接设备和双向通讯。

    前言 上篇文章我们介绍到了开发经典蓝牙和单片机通讯的过程,安卓通讯之<蓝牙单片机通讯助手>①集成工作 ,我们这里还要兼容最新的安卓6.0及以上的系统,因为从6.0以后的权限机制和以往的不一 ...

  4. PLC通过智能网关,实现HTTP协议的POST/GET请求,与服务端JSON格式双向通讯

    智能网关IGT-DSER集成了多种PLC的原厂协议,方便实现各种PLC与服务端之间的HTTP协议通讯,通过网关的参数配置软件绑定JSON文件的字段与PLC寄存器地址,配置URL,即可通过POST/GE ...

  5. SQL Server数据库转MySQL_关于Modbus协议转SQL数据库,实现双向通讯

    IGT-SER智能网关模块,支持各种PLC.智能仪表.远程IO与数据库之间双向通讯,既可以读取设备的数据上报到SQL数据库,也可以从数据库查询数据后写入到设备: 网关安装在设备侧,随设备启动.停止,不 ...

  6. Android蓝牙串口通讯【转】

    本文转载自:http://blog.sina.com.cn/s/blog_631e3f2601012ixi.html Android蓝牙串口通讯 闲着无聊玩起了Android蓝牙模块与单片机蓝牙模块的 ...

  7. C++的MFC 与 HTML 双向通讯

    C++中嵌入ie浏览器总结(1) - ie边框 及上下文菜单 最近项目中用html 来做界面,也就折腾了一下在wxwidget中嵌入浏览器的若干细节工作,mfc也基本是类似的,由于wxwidget中已 ...

  8. C#实现笔记本自带蓝牙与汇承HC-08(BLE)蓝牙模块通讯

    汇承HC-08蓝牙C#通讯 目录 问题背景 感谢 BLE介绍 参考代码 参考业务逻辑 参考库和例程 程序思路 难点介绍 问题1平台和windows sdk 的组件 问题2优化速度和更改同步 问题3蓝牙 ...

  9. android 连接蓝牙电子秤_电子秤蓝牙双模通讯Android低功耗蓝牙(蓝牙4.0)BLE开发(上)...

    电子秤蓝牙双模通讯Android低功耗蓝牙(蓝牙4.0)BLE开发(上) 前段时间,公司项目用到了手机APP和蓝牙设备的通讯开发,这里也正好对低功耗蓝牙(蓝牙4.0及以后标准)的开发,做一个总结. 蓝 ...

最新文章

  1. todoist 无法登陆_通过构建Todoist克隆将您的React技能提升到一个新的水平
  2. Python程序设计 第六章 函数(续
  3. Android中文API-ViewStub
  4. 合并不同gdb下的相同要素_GDB调试学习
  5. python基础--自定义模块、import、from......import......
  6. IIS 7.5出现500.19错误解决方法
  7. C# 在DbContext内通过DbSet名称来访问DbSet
  8. cuda和cudnn下载安装
  9. 安装系统、驱动相关软件下载地址
  10. 【其他】微信双开、多开的几种方法
  11. 微信文章数据分析一(阅读点赞评论)
  12. 正向代理和反向代理(概念特点区别)
  13. Dom(二十一) 拖拽
  14. 工厂系列系统之 MES 系统8 生产计划-订单
  15. 目标追踪拍摄?目标遮挡拍摄?拥有19亿安装量的花瓣app,究竟有什么别出心裁的功能如此吸引用户?
  16. 2021-04-19 一万小时定律
  17. 高级前端工程师和低级前端工程师的区别
  18. 数仓架构实践3:苏宁售后体系四层模型架构
  19. 使用 bash, curl 随机访问指定页面,不输出页面内容
  20. 微信小程序:多功能起名查重工具

热门文章

  1. 连锁多门店收银系统源码之新增采购进货单功能逻辑
  2. 如何快速制作名片/卡片式报表
  3. css网页favicon_网站常用的favicon.ico文件详解
  4. 分享灵动微电子低功耗单片机MM32L系列
  5. 别转的那么快,该打码的还没打码
  6. Anddroid 物流查询快递查询
  7. 【YUM源的配置与使用】
  8. 两门课成绩平均分c语言,【函数C语言面试题】面试问题:C语言(指针方… - 看准网...
  9. nginx 集成lua操作mysql
  10. spring学习--------AOP的实现