一、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. 《评人工智能如何走向新阶段》后记(再续12)
  2. python join_详解Python中的join()函数的用法
  3. 标准模板库(STL)学习指南之set集合
  4. java jar 环境变量_java-jar jar包带环境变量(参数)启动
  5. Linux 下 nginx反向代理与负载均衡
  6. linux服务器虚拟内存设置,修改Linux服务器虚拟内存Swap大小
  7. ucc编译器(语义分析)
  8. react 项目实战(二)创建 用户添加 页面 及 fetch请求 json-server db.json -w -p 8000...
  9. 【宏编程】word统一修改图片样式
  10. 认识JQuery的三天--看视频得到的一些小知识点
  11. 基于spark的微博数据分析
  12. font-family 使用设置
  13. java中加号_java中四则运算中的加号
  14. 特征变换:特征归一化(Normalization)作用以及方法 Min-Max、Z-Score
  15. vue图片时间轴滑动_响应式垂直时间轴组件– vuetimeline
  16. 计算机卡死快捷键,必看!电脑运行卡或软件卡死无响应,怎么办?
  17. 17_微信小程序之抖音微视无限滑动视频列表自定义组件编写
  18. android Check the JVM arguments defined for the gradle process in:
  19. MatLab中多项式
  20. 腾讯QQ大数据:用户增长分析——用户流失预警

热门文章

  1. php 进程管理,PHP 进程管理器 PHP-FPM
  2. C++中friend的使用(friend function and friend class)
  3. pvx什么材质_pvx什么材质_100818 常用塑胶材料牌号
  4. web登录添加用户+IP限制方法
  5. 2021美国大学生数学建模竞赛(美赛)思路代码
  6. Spring Boot 代码简化利器 lombok
  7. 一碗小米粥里的商业故事
  8. 未加载的ntdll.pdb错误
  9. ArcGIS中的归一化处理(normalized)
  10. 倒数日怎么显示在桌面_一款非常好用而且没广告的倒数日软件,记录生活中重要的日子-APP杂货店今日推荐...