android easylink 搜索设备_Android BLE开发解析
一、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开发解析相关推荐
- android easylink 搜索设备_Android开发 EasyLink给wifi模块配网
本文使用的是庆科wifi模块 ------------------------------------------------------------------------------------- ...
- android easylink 搜索设备_easylink安卓下载-easylink手机下载v1.0-兔叽下载站
Easylink软件可以帮助用户们自定义配置,快速使用模块加入本地wifi.软件功能强大,软件操作简单,用户们可以轻视上手使用哦.有需要的朋友们就快点来兔叽下载站下载使用吧. 软件特色 - 搜索本地局 ...
- android easylink 搜索设备_手把手教你将数据从Android移动到iPhone步骤与技巧
对于刚从Android转到iPhone的用户来说,最大的担忧之一就是担心丢失所有数据.由于它们是两个截然不同的操作系统,因此在两个操作系统之间传输所有有价值的数据通常会感到很复杂.幸运的是,借助免费的 ...
- android 蓝牙搜索不到Ble设备
今天写好了项目准备交给测试人员去测试,但是问题来了,我平时运行的都是自己的手机,sdk版本是5.0(21)的,但是测试组给我的手机是安卓4.4的,结果搜都搜不到Ble设备,苦逼了好久,我拿了一个dem ...
- android10蓝牙搜不到ble设备_Android BLE程序在Android 10手机搜不到设备问题分析
前言 前一阵帮别人做个蓝牙的Android程序,调试的好好的, 用的自己的老手机,android 5.1.8.0的都是好好的能够搜索,但是交付过去,对方的华为p30 Android 10手机就是不行, ...
- android mysql 搜索功能_android利用数据库实现搜索联想功能
[实例简介] android利用数据库实现搜索联想功能.主要实现的效果是和google百度搜索一样,实现联想功能. [实例截图] [核心代码] 4e431bd8-d287-4028-8476-7510 ...
- android jni 结构体_Android应用开发Android JNI-c/c++调用java方法
本文将带你了解Android应用开发Android JNI-c/c++调用java方法,希望本文对大家学Android有所帮助. " Android JNI-c/c++调用java方法, ...
- android触屏对焦_Android相机开发(五): 触摸对焦,触摸测光,二指手势缩放
Android Camera Develop: touch to focus, touch to metering, double finger touch to zoom 概述 本篇在(四)的基础上 ...
- Android Bluetooth(蓝牙) - BLE开发
目录 1.何为BLE? 2.基础术语和概念 3.初始化配置 3.1.权限 3.2.是否支持蓝牙BLE
最新文章
- RabbitMq+Haproxy负载均衡
- eclipse html页面校验,当我在Eclipse浏览器中运行url时,HTML表单未通过验证
- 安装Ubuntu时的硬盘分区方案
- Python文件管理模块封装,提供大家直接调用(最全最好用)
- JAVA遇见HTML——JSP篇:JSP内置对象(上)
- centos PIL 安装
- 【个人笔记】OpenCV4 C++ 快速入门 12课
- Chrome 92 版本新特性 92 版本发行说明
- NSIS打包工具用法介绍与NSIS相关软件下载
- 【目标检测】YOLOv5跑通VOC2007数据集
- GB50174-2008《电子信息系统机房设计规范》
- 创建用户要给session权限,报错:user lacks CREATE SESSION privilege
- 致谢zyf2000,仅是你的备份,留念和记录学习C++的足迹
- scl语言用plc脉冲做定时器_请问SCL语言如何调用定时器
- rstudio 连接mysql_Rstudio ODBC 连接MySQL
- Emscripten 单词_真正的英语大神绝不死背单词! 他们用这种方法一周突破3500词
- unity 实现手机振动_Unity3d之音效播放和调用手机震动
- 数据中台之OneID (ID-Mapping)架构设计细节全解
- 思科ccie网络工程师一定要里了解的网络拥塞及拥塞控制技术
- uniapp商城前端源码下载/uniapp多店铺PHP商城源码下载
热门文章
- python测试开发django-124.bootstrap点删除按钮弹确认删除
- html中判断数组是否为空,jquery如何判断数组是否为空?
- 隐形眼镜长期使用不当,易引发巨柱状敏感性结膜炎!
- Gauss–Jacobi_quadrature(MATLAB)
- Eclipse:全局搜索和更替
- 前端JSON数据(56个民族)
- 边缘计算和云计算的关系
- 星巴克激战瑞幸:“咖啡老三们”的危险时刻
- Android QQ空间浏览图片动画特效的实现(※)
- welcome to lalalaland~