蓝牙BLE开发——解决iOS设备获取MAC方式

解决iOS设备获取MAC方式

uniapp 解决 iOS 获取 MAC地址,在Android、iOS不同端中互通,根据MAC 地址处理相关的业务场景;

文章目录

    • 解决iOS设备获取MAC方式
      • 监听寻找到新设备的事件
      • BLE工具效果图
      • APP监听设备返回数据
      • 解决方式
      • ArrayBuffer转16进制
      • 微信小程序 监听设备返回数据
      • MAC 数据

API: onBluetoothDeviceFound

可能会遇到相关问题:请查看

关于进制转换:请点击或搜索相关文章


Desc:

  • AndroidiOS 设备得到的 deviceId 是不一致的,如果想要存储 MAC ,在后面的业务中使用,如何获取 MAC地址
  • Android:得到是 MAC
  • iOS:得到是 UUID
  • tip:不要混淆了,是否处理 MAC 根据需求,不影响设备正常连接;

监听寻找到新设备的事件

function onBluetoothDeviceFound() {
	uni.onBluetoothDeviceFound((res) => {
		console.log('onBluetoothDeviceFound success', res)
		handleFilterDevices(res.devices);
	})
}

BLE工具效果图

在这里插入图片描述


APP监听设备返回数据

  • 很多人以为返回数据是空的,在App端,ArrayBuffer 数据无法直接查看,转换下打印日志也许有惊喜(⊙o⊙)

在这里插入图片描述


解决方式

具体数据 根据 供应商 协议去处理,因有些 供应商 返回 MAC方式不一样;

  • 监听广播数据,根据 MAC 数据存储位置,解析对应 ManufacturerData 数据段、 ServiceData 数据段;

  • MAC 在 advertisData 中: 即ManufacturerData 数据段

    filterDevices(devices) {
        let res = devices.filter(device => {
            if (!device.name && !device.localName) return;
    		
            // ArrayBuffer转16进制
            let advertisData = ab2hex(device.advertisData);
            console.log('advertisData To HEX:', advertisData);
            // ...
        }
    }
    

  • MAC 在 serviceData 中:即 ServiceData 数据段,返回对象

    • 先 转换为 Uint8Array 类型,再 转换 16进制
  • 和效果图一样,返回在 ServiceData
filterDevices(devices) {
    let res = devices.filter(device => {
        if (!device.name && !device.localName) return;

        // 遍历 ServiceData 数据段
        let serviceData = '';
        for (let key in device.serviceData) {
            let tmpData = new Uint8Array(device.serviceData[key]);
            if (tmpData) {
                let tmpHex = ab2hex(tmpData);
                serviceData = tmpHex.join(':');
            }
        }

        device['MAC'] = serviceData;

        // ...
    }
}

  • 通过广播数据段namelocalName中通过名称匹配设备,通常: 前缀 + MAC ,直接截取就行(有些供应商会采取该方式)

ArrayBuffer转16进制

const ab2hex = (buffer) => {
	const hexArr = Array.prototype.map.call(
		new Uint8Array(buffer),
		function(bit) {
			return ('00' + bit.toString(16)).slice(-2)
		}
	)
	return hexArr.join('')
}

微信小程序 监听设备返回数据

小程序,打印日志更直观些

在这里插入图片描述


MAC 数据

[
    {
        "0": 172,
        "1": 35,
        "2": 53,
        "3": 153,
        "4": 83,
        "5": 133
    }
]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/943787.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大表:适用于结构化数据的分布式存储系统

大家觉得有意义和帮助记得及时关注和点赞!!! 译者序摘要1 引言2 数据模型 2.1 行(Row)2.2 Column Families(列族) 2.2.1 设计2.2.2 column key 的格式:family:qualifier2.2.3 访问控制和磁盘/内存记账(acco…

【游戏设计原理】32 - 消费者剩余

1. 如何理解消费者剩余原理? 消费者剩余是一种经济学概念,表示消费者愿意为商品支付的最大金额与实际支付金额之间的差额。 简单来说,消费者剩余衡量了消费者从交易中获得的“额外价值”或“剩余利益”。 在传统商业模式下,由于…

sonarqube 安装及使用

一、官网参考地址 相关版本下载地址 配置全局变量 .bash_profileexport SONAR_HOME=/Users/jd/soft/sonar-scanner-6.2.1.4610 export PATH=$PATH:$SONAR_HOME/bin export SQ_HOST=http://127.0.0.1:9000/ export SQ_TOKEN=squ_dbb1913e095a92a727a918a9ba6b1af94b007748二、…

图研院 | 掌握前沿图技术,从 “Graph XAI” 课程起航

在如今数字化转型加速的时代浪潮下, 图数据库技术正成为众多领域突破创新的关键力量! 你是否也渴望深入了解其背后的核心知识, 开启自己的图技术进阶之旅? 由机工社精心打造的系列大师课, 特邀国际级专家/学者师资…

在国产电脑上运行PDFSAM软件使用pdf分割合并交替混合处理pdf文档

软件下载地址: https://sourceforge.net/projects/pdfsam/files/ 需要注意事项,系统需要java环境,确认系统有java环境,根据软件版本需求安装对应的java运行环境。 下载pdfsam-4.3.4-linux.tar.gz安装包,解压,将runt…

PHP高性能webman管理系统EasyAdmin8

介绍 EasyAdmin8-webman 在 EasyAdmin 的基础上使用 webman 最新版重构,PHP 最低版本要求不低于 8.0。基于webman和layui v2.9.x的快速开发的后台管理系统。 项目地址:http://easyadmin8.top 演示地址:http://webman.easyadmin8.top/admin …

GitLab 将停止为中国区用户提供服务,60天迁移期如何应对? | LeetTalk Daily

“LeetTalk Daily”,每日科技前沿,由LeetTools AI精心筛选,为您带来最新鲜、最具洞察力的科技新闻。 GitLab作为一个广受欢迎的开源代码托管平台,近期宣布将停止服务中国大陆、澳门和香港地区的用户提供服务。根据官方通知&#x…

01.HTTPS的实现原理-HTTPS的概念

01.HTTPS的实现原理-HTTPS的概念 简介1. HTTPS的概念和安全性2. HTTPS的实现原理3. HTTPS和HTTP的区别4. OSI七层协议模型5. SSL和TLS的区别 简介 该系列文章主要讲述了HTTPS协议与HTTP协议的区别,以及HTTPS如何实现安全传输。内容分为三部分:HTTPS的实…

windows10下使用沙盒多开uiautoanimation可行性验证

文章目录 ⭐前言⭐sandboxie下载使用⭐pyinstaller打包python的uiautoanimation成exe⭐结论⭐结束 ⭐前言 大家好,我是yma16,本文分享windows下使用沙盒多开uiautoanimation可行性验证。 背景 实现多开应用程序从而进行自动化控制,批量处理大…

视频汇聚融合云平台Liveweb一站式解决视频资源管理痛点

随着5G技术的广泛应用,各领域都在通信技术加持下通过海量终端设备收集了大量视频、图像等物联网数据,并通过人工智能、大数据、视频监控等技术方式来让我们的世界更安全、更高效。然而,随着数字化建设和生产经营管理活动的长期开展&#xff0…

RabbitMQ工作模式(详解 工作模式:简单队列、工作队列、公平分发以及消息应答和消息持久化)

文章目录 十.RabbitMQ10.1 简单队列实现10.2 Work 模式(工作队列)10.3 公平分发10.4 RabbitMQ 消息应答与消息持久化消息应答概念配置 消息持久化概念配置 十.RabbitMQ 10.1 简单队列实现 简单队列通常指的是一个基本的消息队列,它可以用于…

No Python at ‘C:\Users\MI\AppData\Local\Programs\Python\Python39\python.exe‘

目录 一、检查环境配置 1.1 安装键盘“winR”键并输入cmd 1.2 输入“python” 二、解决问题 2.1 检查本地的python配置路径 2.2 打开PyCharm的Settings 2.3 找到Python Interpreter 2.4 删除当前python版本 2.5 新添版本 PyCharm运行时出现的错误: No Py…

EMQX5.X版本性能配置调优参数

EMQX 主配置文件为 emqx.conf,根据安装方式其所在位置有所不同: 安装方式配置文件所在位置DEB 或 RPM 包安装/etc/emqx/emqx.confDocker 容器/opt/emqx/etc/emqx.conf解压缩包安装./etc/emqx.conf EMQ X 消息服务器默认占用的 TCP 端口包括: 端口 说明…

项目报 OutOfMemoryError 、GC overhead limit exceeded 问题排查以及解决思路实战

项目报 OutOfMemoryError、GC overhead limit exceeded 问题排查以及解决思路实战 前言: 问题现象描述: 1,生产环境有个定时任务,没有初始化告警数据【告警数据量为1000多个】 2,其他定时任务执行正常 3,查…

xinput1_3.dll放在哪里?当xinput1_3.dll丢失时的应对策略:详细解决方法汇总

在计算机系统的运行过程中,我们偶尔会遇到一些令人困扰的问题,其中xinput1_3.dll文件丢失就是较为常见的一种情况。这个看似不起眼的动态链接库文件,实则在许多软件和游戏的正常运行中发挥着至关重要的作用。一旦它丢失,可能会导致…

【Compose multiplatform教程12】【组件】Box组件

查看全部组件文章浏览阅读493次,点赞17次,收藏11次。alignment。https://blog.csdn.net/b275518834/article/details/144751353 Box 功能说明:简单的布局组件,可容纳其他组件,并依据alignment属性精确指定内部组件的对…

MySql:复合查询

✨✨作者主页:嶔某✨✨ ✨✨所属专栏:MySql✨ 准备工作,创建一个雇员信息表(来自oracle 9i的经典测试表) EMP员工表DEPT部门表SALGRADE工资等级表 多表查询 显示雇员名,雇员工资以及所在部门的名字 因为…

从零创建一个 Django 项目

1. 准备环境 在开始之前,确保你的开发环境满足以下要求: 安装了 Python (推荐 3.8 或更高版本)。安装 pip 包管理工具。如果要使用 MySQL 或 PostgreSQL,确保对应的数据库已安装。 创建虚拟环境 在项目目录中创建并激活虚拟环境&#xff…

基于PREEvision的UML设计

众所周知,PREEvision是一款强大的电子电气架构协同开发及管理软件,可以很好地帮助架构工程师完成架构开发工作,其功能包括需求管理、定义功能逻辑、系统软件开发、网络设计、线束设计及整体工程的产品线管理和变形管理等。随着工程师们越来越…

Azure Function 解决跨域问题

这边前端call本地部署的azure function出现了跨域问题,搜索一下解决方案 直接修改local.setting.json,在其中添加CORS配置为通配符”*”,就行了 local.settings.json {"IsEncrypted": false,"Values": {"PYTHON_E…