蓝牙双向通讯【可自定义协议】SDK

一、简介:
    此文档主要是介绍蓝牙双向通讯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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值