一、Ble蓝牙操作流程

蓝牙操作流程图

二、权限声明

1.在Android 6.0(targetSdkVersion小于23)之前在权限的获取和操作只需在AndroidManifest文件中声明这两个权限就可以。

注册蓝牙权限

2.在Android 6.0(targetSdkVersion等于或大于23)之后,操作蓝牙需要申请GPS定位权限,而且在权限的获取和操作上有所改动,分为Normal Permissions和Dangerous Permission。凡是Dangerous Permission都需要动态获取权限。

GPS权限获取

三、获取蓝牙权限

1.对于6.0以上系统需要判断版本调用

版本判断和获取权限

2.系统会回调onRequestPermissionsResult的方法,返回请求权限的结果。

onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)

四、搜索设备

1.BLE设备的搜索调用BluetoothAdapter的startLeScan方法,如下图所示。

方法1

方法2

2.调用扫描方法之后,Android系统会通过LeScanCallback返回扫描的结果。在 onLeScan() 方法中尽量少做耗时的操作,可以把扫描到的设备,扔到另外一个线程中去处理。

搜索设备回调函数

3.搜索设备是耗电的,所以搜索设备需要有时间限制,在搜索到或者超过预定时间之后需要调用stopLeScan(LeSacnCallback callback)方法停止搜索。

五、连接设备

1.通过扫描获取到的BluetoothDevice对象调用connectGatt方法进行连接设备,如果已知BlE设备mac,可以通过BluetoothAdapter的getRemoteDevice(String address)方法获取BluetoothDevice。

创建gatt连接

2. 连接状态是由mGattCallBack的回调方法onConnectionStateChange(BluetoothGatt gatt, int status, int newState)中返回的。�参数解析:

status:返回Gatt的状态(BluetoothGatt.GATT_SUCCESS:成功)

newState:蓝牙连接状态(BluetoothProfile.STATE_CONNECTED 设备已连接, BluetoothProfile.STATE_ DISCONNECTED设备已断开连接 )

3.蓝牙只能同时连接一个外围设备,如果同时发起多个连接,前面连接失败会后面设备连接阻塞。如果需要连接多个设备,建议队列形式连接,如果连接失败,调用disconnect()方法释放连接。

六、发现并获取BluetoothGattService

当设备连接成功之后,调用BluetoothGatt的discoverServices()获取service。执行完成之后将会回调BluetoothGattCallback的方法onServicesDiscovered(BluetoothGatt gatt, int status)。

BluetoothGatt解析

Android BLE蓝牙通信是通过BluetoothGatt 中的service和Characteristic进行通信的。

通过对外设的连结获取BluetoothGatt ,一个外设只能同时被一个中心设备连结,连结之后外设的蓝牙广播就会中断,其他中心设备将无法连结。

1.BluetoothGatt类包含多个service。

2.每个service中包含多个Characteristic。

3.一个Characteristic中包含一个value和多个Descriptor。

七、注册Notification

当BLE设备主动发送数据的时候,需要注册Notification来接收数据,注册Notification之后,设备发送数据会回调BluetoothGattCallback的onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic)方法。如何注册如下操作:

注册蓝牙监听

八、BLE写操作

写数据操作,需要调用BluetoothGatt的writeCharacteristic(BluetoothGattCharacteristic characteristic)的方法,需要写的数据通过BluetoothGattCharacteristic的setValue(byte[] value)方法进行设置。

写命令操作

当对蓝牙操作完成之后 要及时关闭连接。关闭蓝牙连接调用 BluetoothGatt的disconnect()方法,调用BluetoothGatt的close()方法来释放连接对象;

BluetoothGatt的操作,如writeCharacteristic、readCharacteristic、writeDescriptor、readDescriptor和readRemoteRssi()都是异步操作。如果同时执行多个writeCharacteristic操作,在第一个操作没有返回的情况下(回调 onCharacteristicWrite()之后),以下的写操作是无效的。

解决办法推荐:将所有的写或者读操作写到一个队列里,封装成一个同步的操作,在操作没有返回之前,让下一个操作等待。

android easylink 搜索设备_Android BLE开发解析相关推荐

  1. android easylink 搜索设备_Android开发 EasyLink给wifi模块配网

    本文使用的是庆科wifi模块 ------------------------------------------------------------------------------------- ...

  2. android easylink 搜索设备_easylink安卓下载-easylink手机下载v1.0-兔叽下载站

    Easylink软件可以帮助用户们自定义配置,快速使用模块加入本地wifi.软件功能强大,软件操作简单,用户们可以轻视上手使用哦.有需要的朋友们就快点来兔叽下载站下载使用吧. 软件特色 - 搜索本地局 ...

  3. android easylink 搜索设备_手把手教你将数据从Android移动到iPhone步骤与技巧

    对于刚从Android转到iPhone的用户来说,最大的担忧之一就是担心丢失所有数据.由于它们是两个截然不同的操作系统,因此在两个操作系统之间传输所有有价值的数据通常会感到很复杂.幸运的是,借助免费的 ...

  4. android 蓝牙搜索不到Ble设备

    今天写好了项目准备交给测试人员去测试,但是问题来了,我平时运行的都是自己的手机,sdk版本是5.0(21)的,但是测试组给我的手机是安卓4.4的,结果搜都搜不到Ble设备,苦逼了好久,我拿了一个dem ...

  5. android10蓝牙搜不到ble设备_Android BLE程序在Android 10手机搜不到设备问题分析

    前言 前一阵帮别人做个蓝牙的Android程序,调试的好好的, 用的自己的老手机,android 5.1.8.0的都是好好的能够搜索,但是交付过去,对方的华为p30 Android 10手机就是不行, ...

  6. android mysql 搜索功能_android利用数据库实现搜索联想功能

    [实例简介] android利用数据库实现搜索联想功能.主要实现的效果是和google百度搜索一样,实现联想功能. [实例截图] [核心代码] 4e431bd8-d287-4028-8476-7510 ...

  7. android jni 结构体_Android应用开发Android JNI-c/c++调用java方法

    本文将带你了解Android应用开发Android JNI-c/c++调用java方法,希望本文对大家学Android有所帮助. " Android   JNI-c/c++调用java方法, ...

  8. android触屏对焦_Android相机开发(五): 触摸对焦,触摸测光,二指手势缩放

    Android Camera Develop: touch to focus, touch to metering, double finger touch to zoom 概述 本篇在(四)的基础上 ...

  9. Android Bluetooth(蓝牙) - BLE开发

    目录 1.何为BLE? 2.基础术语和概念 3.初始化配置 3.1.权限 3.2.是否支持蓝牙BLE

最新文章

  1. RabbitMq+Haproxy负载均衡
  2. eclipse html页面校验,当我在Eclipse浏览器中运行url时,HTML表单未通过验证
  3. 安装Ubuntu时的硬盘分区方案
  4. Python文件管理模块封装,提供大家直接调用(最全最好用)
  5. JAVA遇见HTML——JSP篇:JSP内置对象(上)
  6. centos PIL 安装
  7. 【个人笔记】OpenCV4 C++ 快速入门 12课
  8. Chrome 92 版本新特性 92 版本发行说明
  9. NSIS打包工具用法介绍与NSIS相关软件下载
  10. 【目标检测】YOLOv5跑通VOC2007数据集
  11. GB50174-2008《电子信息系统机房设计规范》
  12. 创建用户要给session权限,报错:user lacks CREATE SESSION privilege
  13. 致谢zyf2000,仅是你的备份,留念和记录学习C++的足迹
  14. scl语言用plc脉冲做定时器_请问SCL语言如何调用定时器
  15. rstudio 连接mysql_Rstudio ODBC 连接MySQL
  16. Emscripten 单词_真正的英语大神绝不死背单词! 他们用这种方法一周突破3500词
  17. unity 实现手机振动_Unity3d之音效播放和调用手机震动
  18. 数据中台之OneID (ID-Mapping)架构设计细节全解
  19. 思科ccie网络工程师一定要里了解的网络拥塞及拥塞控制技术
  20. uniapp商城前端源码下载/uniapp多店铺PHP商城源码下载

热门文章

  1. python测试开发django-124.bootstrap点删除按钮弹确认删除
  2. html中判断数组是否为空,jquery如何判断数组是否为空?
  3. 隐形眼镜长期使用不当,易引发巨柱状敏感性结膜炎!
  4. Gauss–Jacobi_quadrature(MATLAB)
  5. Eclipse:全局搜索和更替
  6. 前端JSON数据(56个民族)
  7. 边缘计算和云计算的关系
  8. 星巴克激战瑞幸:“咖啡老三们”的危险时刻
  9. Android QQ空间浏览图片动画特效的实现(※)
  10. welcome to lalalaland~