android – 蓝牙LE扫描过滤器无法正常工作

android – 蓝牙LE扫描过滤器无法正常工作,第1张

概述我想在我的 Android代码中只扫描具有特定UUID的BLE信标.即使我可以为特定的MAC地址添加过滤器,我也无法使用UUID.永远不会调用onScanResult函数.为什么会这样?我正在使用API​​ 21,我没有收到任何项目错误. final String tagUUID = "01122334-4556-6778-899a-abbccddeeff0";//does not work 我想在我的 Android代码中只扫描具有特定UUID的BLE信标.即使我可以为特定的MAC地址添加过滤器,我也无法使用UUID.永远不会调用onScanResult函数.为什么会这样?我正在使用API​​ 21,我没有收到任何项目错误.
final String tagUUID = "01122334-4556-6778-899a-abbccddeeff0";//does not workScanFilter filter = new ScanFilter.Builder().setServiceUuID(new ParcelUuID(UUID.fromString(tagUUID))).build();//worksScanFilter filter = new ScanFilter.Builder().setDeviceAddress(tagMAC).build();
解决方法 我是上面提到的博客文章的作者.以下是解决AndroID 21问题的方法.
// Empty databyte[] manData = new byte[]{0,0};// Data Maskbyte[] mask = new byte[]{0,1,0};// copy UUID into data array and remove all "-"System.arraycopy(hexStringToByteArray("YOUR_UUID_TO_FILTER".replace("-","")),manData,2,16);// Add data array to filtersScanFilter filter = new ScanFilter.Builder().setManufacturerData(76,mask).build());public static byte[] hexStringToByteArray(String s) {    int len = s.length();    byte[] data = new byte[len / 2];    for (int i = 0; i < len; i += 2) {        data[i / 2] = (byte) ((Character.digit(s.charat(i),16) << 4)                + Character.digit(s.charat(i+1),16));    }    return data;}

这里的问题是你可以添加UUID过滤但不完全直截了当

总结

以上是内存溢出为你收集整理的android – 蓝牙LE扫描过滤器无法正常工作全部内容,希望文章能够帮你解决android – 蓝牙LE扫描过滤器无法正常工作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1136758.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存