当前位置: 首页 > news >正文

安卓BLE蓝牙开发经验分享

注意点一:一开始必须申请权限,否则后面根本无法成功。

注意点二:BLE使用向某个特征写入来发送数据,写入一次默认长度是23字节,必须向蓝牙设备申请更大字节的写入才能发送更多字节。(23字节是BLE通信的最小MTU大小)。能申请多大还得看蓝牙服务器情况。

注意点三:比如操作申请更大MTU时候,必须等待申请结果回来之后才能继续执行接下来的蓝牙操作,比如说发现服务。(申请结果在回调函数里面)。如果还没等申请结果出来,马上执行发现服务,那么可能两个都要失败。以此类推,蓝牙操作需要一个一个来。猜测是正在进行空中通信需要时间。

第一步:申请蓝牙权限(非常重要,否则后面没法成功)

1:首先,在AndroidManifest.xml这个文件里面加上权限请求。

权限代码

    <!-- 请求蓝牙权限 --><uses-permission android:name="android.permission.BLUETOOTH"/> <!-- 请求蓝牙权限 --><uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <!-- 请求蓝牙管理权限 --><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <!-- 请求精细位置权限,用于BLE扫描 (API 23+) --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <!-- 请求粗略位置权限,用于BLE扫描 (API 23+) --><uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/> <!-- 请求连接已配对蓝牙设备的权限 (API 31+) --><uses-permission android:name="android.permission.BLUETOOTH_SCAN"/> <!-- 请求扫描附近蓝牙设备的权限 (API 31+) --><uses-permission android:name="android.permission.BLUETOOTH" /><uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /><uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /><uses-permission android:name="android.permission.BLUETOOTH_SCAN" /><uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

2:还需要在在activity里面继续申请一次。(会有一些包文件要求导入,按照提示导入)

//========================================先设置一个申请权限结果的回调函数==========================================// 动态请求权限,注册ActivityResultLauncher来处理权限请求的结果   请求权限之后的回调函数  判断请求到了什么权限permissionLauncher =activity. registerForActivityResult(  //这是个请求权限之后的回调函数new ActivityResultContracts.RequestMultiplePermissions(),permissions -> {StringBuilder deniedPermissions = new StringBuilder();// 构建一个字符串,用于记录未授权的权限boolean allGranted = true;// 初始化一个布尔值,用于判断所有权限是否都被授权// 遍历权限映射,检查是否有任何权限未被授予for (String key : permissions.keySet()) {// 如果当前权限未被授予,则将所有权限标记为非全部授予if (!permissions.get(key)) {allGranted = false;deniedPermissions.append(key).append(", "); // 将未授予的权限键添加到拒绝权限列表中}}// 如果存在被拒绝的权限,则移除最后一个 逗号 和 空格 以确保格式正确if (deniedPermissions.length() > 0) {deniedPermissions.setLength(deniedPermissions.length() - 2);}// 如果所有权限都被授予,则执行以下操作if (allGranted) {//这里就是全都成功了可以添加自己的程序//ble_status_callback. Permission_requests_all_successful();//处理权限请求成功回调函数} else {ble_status_callback. Permission_request_failed();//处理权限请求失败回调函数}});
//=====================================================================================//=====================================这里开始正式申请权限============================================// 定义应用所需权限数组String[] permissions = {// 请求蓝牙权限,包括蓝牙连接和精确位置访问Manifest.permission.BLUETOOTH, // 允许应用程序连接到已配对的蓝牙设备Manifest.permission.BLUETOOTH_ADMIN, // 允许应用程序发现和配对蓝牙设备Manifest.permission.BLUETOOTH_CONNECT, // 从Android 12开始,允许应用程序连接到蓝牙设备Manifest.permission.BLUETOOTH_SCAN, // 从Android 12开始,允许应用程序扫描蓝牙LE设备和服务Manifest.permission.ACCESS_FINE_LOCATION // 从Android 6.0开始,蓝牙扫描需要位置权限};permissionLauncher.launch(permissions);// 使用permissionLauncher发起权限请求
//====================================================================================

(到这里就才算申请成功,才可以继续接下来的蓝牙相关的操作)

(到这里简略说一下接下来的流程。--->扫描BLE设备--->选择想要的BLE设备连接--->查找这个设备下面有什么服务--->查找每个服务下有什么特征--->查找每个特征都有什么权限

http://www.lryc.cn/news/504342.html

相关文章:

  • 后缀表达式有什么场景应用
  • 使用 Kubernetes 部署 Redis 主从及 Sentinel 高可用架构(未做共享存储版)
  • AI开发 - 用GPT写一个GPT应用的真实案例
  • C#—索引器
  • 杨振宁大学物理视频中黄色的字去掉(稳定简洁版本,四)
  • 排序算法(5):归并排序
  • Gate学习(7)引入体素源
  • 2024.12.14 TCP/IP 网络模型有哪几层?
  • item2 for macos
  • 二维三维空间上两点之间的距离
  • 相机测距原理
  • Debezium SchemaNameAdjuster 分析
  • Stable Diffusion绘画 | SDXL模型使用注意事项
  • (五)机器学习 - 数据分布
  • Flink State面试题和参考答案-(上)
  • 利用开源Stable Diffusion模型实现图像压缩比竞争方法用更低的比特率生成更逼真的图像
  • QT信号与槽机制详解
  • openGauss开源数据库实战二十二
  • BurpSuite解决暴力破解时需要验证码问题
  • WPF Combox使用 Text无法选择正确获取CHange后的Text
  • 【速览】设计模式(更新中)
  • 【stable diffusion部署】Stable Diffusion开源本地化的文生图图生图AI
  • 县城楼市踩踏式降价,或现2字头,率先回归月薪一平方的合理价格
  • 计算机组成原理(七):二进制编码
  • 【GitHub分享】you-get项目
  • 论文概览 |《Sustainable Cities and Society》2024.12 Vol.116
  • 解决node.js的req.body为空的问题
  • Mysql学习笔记之安装
  • 将PDF流使用 canvas 绘制然后转为图片展示在页面上(二)
  • 【深度学习】 零基础介绍卷积神经网络(CNN)