Android之Bluetooth通信-BLE(Gatt)客户端分析

客户端

https://blog.csdn.net/qq_38950819/article/details/103067487

https://www.jianshu.com/p/3711cfbf7128

https://blog.csdn.net/nz90921001/article/details/81259921/

https://www.jianshu.com/p/6cb304089cc3

https://www.jianshu.com/p/795bb0a08beb

客户端+服务端

https://blog.csdn.net/a_zhon/article/details/96166596

https://github.com/a1anwang/okble/blob/master/README_zh.md  //代码

服务端:

https://www.cnblogs.com/Free-Thinker/p/9314775.html

http://a1anwang.com/post-47.html

http://a1anwang.com/post-36.html

http://a1anwang.com/post-37.html

charac说明:

https://www.cnblogs.com/asam/p/8676369.html

案例

https://android.googlesource.com/platform/development/


原理学习

BLE的广播, BLE设备之所以能被手机扫描到,是因为 BLE设备一直在每隔 一段时间广播一次,这个广播里面包含很多数据MTU:最大传输单元(MAXIMUM TRANSMISSION UNIT),指在一个PDU(Protocol Data Unit:协议数据单元,在一个传输单元中的有效传输数据)能够传输的最大数据量(多少字节可以一次性传输到对方)

案例

源码里面的demo在哪里呢?development例如蓝牙相关development/samples/BluetoothLeGattBluetoothChatBluetoothHDP系统服务的demoframeworks/base/tests

重点说明

客户端

BluetoothGatt  --- 通过此类发送消息

BluetoothGattService  --  特定服务

BluetoothGattCharacteristic  -- 特定字符

BluetoothGattCallback  -- 回调监听

第一个维度:

怎么获取?

1.我们怎么获取BluetoothGatt?

BluetoothGatt gatt = BluetoothDevice.connectGatt(context, false , bluetoothGattCallback);

2.怎么从BluetoothGatt中获取BluetoothGattService

1)先启动发现服务:gatt.discoverServices();

2)再从bluetoothGattCallback.onServicesDiscovered的回调方法中调用

gatt.getServices()通过特定uuid找特定服务。例如:

        for (BluetoothGattService service : gatt.getServices()) {

            Log.d(TAG, "service uuid " + service.getUuid() + " type "+service.getType());

            if (service.getUuid().toString().equals(serviceUUID)) {//客户端默认一个uuid

                bluetoothGattService = service;

            }

        }


3.怎么从BluetoothGattService中获取BluetoothGattCharacteristic

从2中找到了BluetoothGattService,就可以在通过uuid找对应的BluetoothGattCharacteristic

例如。bluetoothGattService.getCharacteristic(uuid)

或者

        for (BluetoothGattCharacteristic characteristic : bluetoothGattService.getCharacteristics()) {

            Log.d(TAG, "characteristic uuid "+characteristic.getUuid()+" type "+characteristic.getProperties());

            if (characteristic.getUuid().toString().equals(readUUID)) {  //读特征

                readCharacteristic = characteristic;

            } else if (characteristic.getUuid().toString().equals(writeUUID)) {  //写特征

                writeCharacteristic = characteristic;

            }

        }

第二个维度:

目的干什么?

我们的目的是把数据发出去,而发数据的关键是BluetoothGattCharacteristic

发数据的工具是BluetoothGatt

例如

客户端主动要求的:

BluetoothGatt.writeCharacteristic

回调于

bluetoothGattCallback.onCharacteristicWrite

BluetoothGatt.readCharacteristic

回调于

bluetoothGattCallback.onCharacteristicRead

客户端端被动接收的:

按照以往的思路,先要设置监听对象

BluetoothGatt.setCharacteristicNotification 

设置需要监听的BluetoothGattCharacteristic

回调于

bluetoothGattCallback.onCharacteristicRead

注意:

如果你想监听几个,就需要设置几个BluetoothGattCharacteristic


服务端 -- BluetoothGattServer

关键类

BluetoothGattServer  --- 发送数据的关键类

BluetoothGattService  --  ble特定服务

BluetoothGattCharacteristic  -- ble特定字符

BluetoothGattServerCallback  -- 回调监听

BluetoothLeAdvertiser --- 广播ble

AdvertiseData        --- 广播所带数据

AdvertiseSettings    --- 广播属性设置

简单来说:

1.如果我们需要我们的ble service被监听到,就需要时时广播

2.广播需要分两步走:

a.先广播:BluetoothLeAdvertiser.startAdvertising

发送的广播被客户端扫描的时候接收到

b.再启动服务:BluetoothGattServer.addService

服务是我们自定义

服务里面的属性需要BluetoothGattService.addCharacteristic进去

这里就涉及uuid的设置了

3.接下来就是客户端获取监听成功后的回调监听


Android 蓝牙

更多精彩内容,就在APP

"小礼物走一走,来关注我"

赞赏支持还没有人赞赏,支持一下

锄禾豆做好日子的记录者

总资产19共写了3.3W字获得75个赞共75个粉丝

关注

全部评论1只看作者

按时间倒序

按时间正序

被以下专题收入,发现更多相似内容

收入我的专题

推荐阅读更多精彩内容

Android蓝牙系列——客户端与服务端通信过程以及实现数据通信

一.蓝牙数据传输 蓝牙数据传输其实跟我们的 Socket(套接字)有点类似,如果有不懂的,可以百度一下概念,我们只...

justCode_阅读 3,042评论 0赞 7

Android-低功耗蓝牙(BLE)-客户端(主机/中心设备)和服务端(从机/外围设备)

参考:https://developer.android.com/guide/topics/connectivit...

lioilwin阅读 4,550评论 3赞 10

Android ble低功耗蓝牙开发-客户端

什么是BLE(低功耗蓝牙) BLE(Bluetooth Low Energy,低功耗蓝牙)是对传统蓝牙BR/EDR...

流水潺湲阅读 1,532评论 4赞 8

ESP32学习笔记(33)——BLE GATT客户端发现服务和读写特征值

一、背景 1.1 GATT协议 GATT(Generic Attributes Profile)的缩写,中文是通用...

Leung_ManWah阅读 933评论 0赞 1

Android蓝牙——手机与蓝牙设备连接及通信

前序 笔记基于蓝牙4.0,即低功耗蓝牙BLE。因Google在android 4.3(API Level 18)的...

何小送阅读 10,624评论 1赞 12

Android使用BLE(低功耗蓝牙,Bluetooth Low Energy)

背景 在学习BLE的过程中,积累了一些心得的DEMO,放到Github,形成本文。感兴趣的同学可以下载到源代码。g...

张云飞Vir阅读 6,973评论 1赞 52

Android 蓝牙4.0 Ble通讯问题小汇总

由于公司前段时间有一个项目要用到蓝牙BLE技术,才开始研究Ble技术,在网上也找了很多文章查看,基本的蓝牙连接通讯...

梦游的猪阅读 566评论 0赞 1

android蓝牙BLE(二) —— 通信

一、蓝牙基础协议 想了解蓝牙通信之前,需要先了解蓝牙两个最基本的协议:GAP 和 GATT。 GAP(Generi...

大棋17阅读 12,086评论 2赞 20

Android之Bluetooth通信-BLE(Gatt)服务端分析

源码 核心代码 1.怎么设置广播1)应用 2)源码分析。案例:BluetoothLeAdvertiser.star...

锄禾豆阅读 229评论 0赞 0

使用 Frida 逆向分析 Android 应用与 BLE 设备的通信

处理 BLE(Bluetooth Low Energy,低功耗蓝牙)设备时常碰到的一个问题就是,确定有哪些信息发送...

看雪学院阅读 1,304评论 0赞 4

Android进程间通信(七)——客户端调用服务端onTransact流程分析

在Android进程间通信(六)——普通进程的bindService流程[https://www.jianshu....

Boahui阅读 496评论 0赞 1

Android BLE开发的基础知识

1.前言 随着智能穿戴的普及,蓝牙开发也火热起来。不过与传统蓝牙开发不一样的是,由于考虑到穿戴设备的电量问题和使用...

lanceJin阅读 1,687评论 0赞 9

Kubernetes 实战 —— 05. 服务:让客户端发现 pod 并与之通信(下)

将服务暴露给外部客户端 P136 有以下三种方式可以在外部访问服务: 将服务的类型设置成 NodePort 将服务...

满赋诸机阅读 78评论 0赞 0

[Android] Android 操作 Bluetooth(二)——BLE

0x00 低功耗蓝牙(BLE) 上一篇简单介绍了传统蓝牙设备的使用,当你沿着上一篇的思路去连接某些蓝牙设备的时候,...

ttdevs阅读 1,210评论 0赞 0

C#网络编程自学笔记——快速实现客户端服务器通信

这个系列文章将会对C#的网络编程常用方法和编程技巧进行记录。本文主要记录基于TCP/IP协议的本地客户端与华为云电...

闪烁的量子阅读 260评论 0赞 1

张艺谋要在电影院开“画展”,预告片孙俪都是戏,关晓彤可期待!

今天青石的票圈出镜率最高的,莫过于张艺谋的新片终于定档了。 一张满溢着水墨风的海报一次次的出现在票圈里,也就是老谋...

青石电影阅读 8,552评论 1赞 3

初识jQuery之jQuery设计思想(一)

一、jQuery简介 JQ是JS的一个优秀的库,大型开发必备。在此,我想说的是,JQ里面很多函数使用和JS类似,所...

Welkin_qing阅读 10,551评论 1赞 7

python-day3

字符串 1.什么是字符串 使用单引号或者双引号括起来的字符集就是字符串。 引号中单独的符号、数字、字母等叫字符。 ...

mango_2e17阅读 6,576评论 1赞 7

《闭上眼睛才能看清楚自己》读书分享

《闭上眼睛才能看清楚自己》这本书是香海禅寺主持贤宗法师的人生体悟,修行心得及讲学录,此书从六个章节讲述了禅修是什么...

宜均阅读 7,573评论 1赞 25

长投学堂:希望遇见更好的自己

  偶然间从公众号里看见了小白训练营的课。就点进去看了看。刚开始的时候我觉得就是骗人的。后来一想,学费那么少。干嘛...

天天优惠233阅读 3,265评论 0

作者:锄禾豆

链接:https://www.jianshu.com/p/ac22f8e1b547

来源:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(Android之Bluetooth通信-BLE(Gatt)客户端分析)