客户端
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
来源:
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。