swing的jlist的值怎么获取_彻底解决安卓/IOS获取蓝牙ID不一致的问题
不知道大家对低能蓝牙的技术应用了解的怎么样,其实这是一个比较广的应用,比如可以应用于一些信标、家庭娱乐或者医疗方面都有应用。
01 前言
因为小程序官方是支持接入低能蓝牙(BLE)的,所以在一个项目中也尝试使用如何接入蓝牙,我们从微信的官方网站就可以清楚知道如何使用,但是其中也是有很多坑的。本着学习的心态,自己也手把手带你摸坑,一起处理一些平台兼容性的问题以及一些逻辑判断问题。
02 问题抛出
因为蓝牙在IOS客户端6.5.6版本开始支持,安卓6.5.7开始支持,所以一开始我们就应该判断版本问题,以免后面的功能不能使用。
我们从文档上面看到这样一段话:
由于系统限制,Android 上获取到的 deviceId 为设备 MAC 地址,iOS 上则为设备 uuid。因此 deviceId 不能硬编码到代码中。
看到这里我就想着,完犊子了,因为我们的手机平台有安卓和苹果,唯一标识蓝牙的就是deviceId,但是苹果搜索出来就不是这个了,而是uuid的一串字符串。因为苹果官方认为透露deviceId(MAC地址)会有安全问题,索性直接屏蔽了。
03 使用方法
为了保证本文的完整性,我就大概介绍一下怎么使用在小程序接入低能蓝牙,大家也可以去官网看一下。
- 初始化蓝牙模块
openBluetoothAdapter() { var that = this; if (wx.openBluetoothAdapter) { wx.openBluetoothAdapter({ success: function (res) { wx.showToast({ title: "正在获取蓝牙列表", icon: "loading", }); that.getBluetoothAdapterState(); }, fail: function (err) { wx.showModal({ title: "提示", content: "请先打开蓝牙", showCancel: false, }); that.stopBluetoothDevicesDiscovery(); }, }); } else { } },
- 获取本机蓝牙适配器状态
var that = this; wx.getBluetoothAdapterState({ success: function (res) { that.startBluetoothDevicesDiscovery(); }, fail(err) { console.log(err); }, });
- 开始搜寻附近的蓝牙外围设备
startBluetoothDevicesDiscovery() { console.log("获取蓝牙设备列表"); var that = this; that.data.devices = []; wx.startBluetoothDevicesDiscovery({ success: function (res) { that.getBluetoothDevices(); }, fail(err) { console.log(err); }, }); },
- 获取在蓝牙模块生效期间所有已发现的蓝牙设备
getBluetoothDevices() { var _this = this; wx.getBluetoothDevices({ services: [], allowDuplicatesKey: false, interval: 0, success: function (res) { wx.hideToast(); console.log(res); }, fail(res) { console.log(res, "获取蓝牙设备列表失败====="); }, }); },
经过上面的一通操作之后我们就可以获取到蓝牙列表了,你可以查看你的低能蓝牙是否可以获取到。看到这里你就可以发现安卓与苹果的搜索结果是不一样的。
苹果获取的蓝牙
安卓获取的蓝牙
04 解决途径
「版本问题」
首先就是版本的问题,我们要判断写一个版本的判断函数用来判别用户的版本:
function versionCompare(ver1, ver2) { var version1pre = parseFloat(ver1) var version2pre = parseFloat(ver2) var version1next = parseInt(ver1.replace(version1pre + ".", "")) var version2next = parseInt(ver2.replace(version2pre + ".", "")) if (version1pre > version2pre) returntrue elseif (version1pre < version2pre) returnfalse else { if (version1next > version2next) returntrue else returnfalse }}
然后调用微信的官方接口来获取手机版本:
wx.getSystemInfo({ success(res) { let currVersion = res.system.split(' ')[1]; if (res.platform == 'android' && util.versionCompare('6.5.7', currVersion)) { wx.showModal({ title: '提示', content: '当前android版本过低,暂不支持', showCancel: false }) } elseif (res.platform == 'ios' && util.versionCompare('6.5.6', currVersion)) { wx.showModal({ title: '提示', content: '当前ios版本过低,暂不支持', showCancel: false }) } } })
「跨平台方案」
我们必须保证设备的标识唯一,两种平台获取的数据是一样的,那么我们既然不能联系苹果叫他开放,我们就采用一个折中的方法。
我一开始网上查找了很多资料,其中有说道蓝牙的advertisData当中是含有MAC地址的数据包,你只要解析一下就可以获取了,但是我按照他的方法操作一番发现安卓的deviceId和我获取的是不一样的值。所以就放弃这个方法了。
这时我就想着既然苹果可以通过这个字段获取到一个唯一值,那么安卓同样也可以呀。所以安卓端我也同样使用这个方法获取,不出所料果然可以。
我把这个方法称之为适配器方法,因为和设计模式的适配器模式思想一样:
function getUniqueId(bf) { let buffer = bf.slice(4, 10); let mac = Array.prototype.map.call(newUint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join(''); return mac.toUpperCase()}
简单介绍一下,这是一个处理buffer的函数,因为我们展开advertisData字段看到是buffer类型的,只要我们把它当作参数传进去就可以获取到16进制的值,我就把这个值当作蓝牙的唯一标识。例如F3C85DF5EFFB的这种标识。
05 小结
期间也用过尝试很多种的方式来解决这个顽固的问题,但是都没有成功。心里就只有一个想法就是如何把这两者通过中间方法获取都是一样的值。
这个项目我觉得最大的坑就是这个了,曾经研究了好多天的时间都不曾解决,一开始我也不知道有这个限制,我还问过淘宝的蓝牙生产商能不能在蓝牙上面多加一个广播字段与deviceId一样,加入可以的话就直接获取了,也没有这么多事情了。奈何不行。
所以希望大家做这一块的话可以留意一下这个问题,但是我还发现有一些蓝牙的广播字段没有这个advertisData这个字段,那么我的方法也就不管用了,我还在想着怎么解决这个问题,后面有进展再更新吧。
swing的jlist的值怎么获取_彻底解决安卓/IOS获取蓝牙ID不一致的问题相关推荐
- python获取安卓手机的屏幕_[Python]从安卓手机获取屏幕截图
按照惯例首先是准备环境啦: 一.配置adb 1.找到android sdk的本地路径, adb命令在platform-tool下面,记为XXXX 我的路径是(/Applications/eclipse ...
- 安卓编程用什么软件_震惊!安卓IOS都可以用的牛逼软件
哈喽!小伙伴们大家好,在过去小辉辉推送的文章及软件中,小辉辉发现,大家普遍对观看影视的软件情有独钟,好了,为了满足大家一致的需求,小辉辉今天为大家推荐一个无论安卓手机还是苹果手机都可以用的牛逼影视观看 ...
- php curl获取乱码,如何解决php curl获取乱码
php curl获取乱码的解决办法:首先打开相应的脚本文件:然后获取网页文本:最后通过"b_convert_encoding($outPageTxt, 'utf-8','GB2312');& ...
- favicon自动获取_友情链接前面自动获取并添加favicon.ico小图标
之前看到可风博客底部友情链接都加了ico小图标,感觉很新颖,很好看.于是乎我也开始折腾,我不想每次添加友情链接的时候都得手动的去添加ico图标的小链接,浪费时间,然后就百度了以下,还真有教程,然后我就 ...
- 熹妃传获取服务器信息,熹妃传阅历怎么获取_熹妃传阅历获取攻略_手心游戏
熹妃传阅历是用来升级技能的,所点技能越高,阅历消耗得越多.熹妃传阅历不够了怎么办?阅历怎么获取呢?接下来就由小编为大家带来熹妃传阅历获取攻略. 熹妃传阅历获取攻略 1.当差,让随从当差抄经来获取阅历. ...
- python读取手机屏幕图像_[Python]从安卓手机获取屏幕截图
按照惯例首先是准备环境啦: 一.配置adb 1.找到android sdk的本地路径, adb命令在platform-tool下面,记为XXXX 我的路径是(/Applications/eclipse ...
- qrcode获取图片链接在安卓/ios上的问题
最近项目使用qrcode生成二维码,制作图片预览时出现了一个问题,在ios端使用 document.querySelector('img') 时没有问题,可以获取到图片及src,但是在Android端 ...
- 安卓手机管理_彻底解决安卓手机通知管理难题,顺便还实现了聊天消息防撤回!?
虽然阿虚有几年没用 Android 系统了,但今天还是想来聊聊 Android 系统的通知管理 Google 从 2007年开发 Android 系统以来,其实一直有在「为用户提供更好的通知体验」这件 ...
- mysql不同版本乱码_技术|解决MySQL中文乱码以及版本不一致问题
这几天基于Heritrix写了一个爬虫,用到MySQL,在导入导出数据时,遇到一些乱码问题,好不容易解决了,记录一下,以备查看. 一.导出数据 先说明一下自己的环境:Mac OS X 10.8.3, ...
最新文章
- EXP6 信息搜集与漏洞扫描
- sublime text 3 使用过程总结记录
- 《『若水新闻』客户端开发教程》——20.程序打包发布
- 主板电源开关接口图解_电脑主板开机电路检修步骤及思路。
- VMware 虚拟机的虚拟磁盘编程知识点扫盲之一
- 结构计算机分析,计算机系统结构 (三) CPU及其结构分析
- 20周年献礼:Visual Studio 2017正式版3月7日发布
- 2019-ACM-ICPC-南京区网络赛-E. K Sum(莫比乌斯反演 + 杜教筛)
- 600. 不含连续1的非负整数
- 2021 年 Linux 界的 12 件大事
- Java如何连接mysql数据库详解(代码)
- python itertools卡死_Python使用itertools模块来解决算法问题,python
- PyTorch系列入门到精通——DataLoader与Dataset
- Tosca 给定义变量,取内容放到变量里
- 同步升压与异步升压_单相220V转三相380V升压变频器
- Office安装成功之后,.ppt的文档图标显示不正常,怎么解决?
- LigerUI的简单使用示例
- TP6使用守护进程完成队列任务
- C++中string子串
- Ubuntu16.04系统+GTX1050TI显卡的tensorflow1.6(GPU版)安装-详细图文
热门文章
- 职业发展加速器,埃森哲智能云服务创新中心热招云人才
- AWS 聘用 Rust 编译器联合创始人,大企为何都爱 Rust?
- 共建数据库软件全生态,新数科技宣布 ShinSight 开放共享!
- 滴滴技术总监受贿 1000 万,列入招聘黑名单,互联网大厂反腐有多强?
- 华为或将推出“华为搜索”;​飞书回应微信指控;Fuchsia OS 进入开发者试用阶段 | 极客头条...
- 2020 大会员惊喜上线!大特权限时领取!
- Electron 遭封杀,Web 开发者在苹果平台上举步维艰!
- “Jupyter的杀手”:Netflix发布新开发工具Polynot
- 5G 芯片的“春秋五霸”
- 余承东吐槽苹果续航;微软 IE 浏览器被曝漏洞;React Native 0.61.0 发布 | 极客头条...