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

我想在我的 Android代码中只扫描具有特定UUID的BLE信标.即使我可以为特定的MAC地址添加过滤器,我也无法使用UUID.永远不会调用onScanResult函数.为什么会这样?我正在使用API​​ 21,我没有收到任何项目错误.
final String tagUUID = "01122334-4556-6778-899a-abbccddeeff0";

//does not work
ScanFilter filter = new ScanFilter.Builder().setServiceUuid(new ParcelUuid(UUID.fromString(tagUUID))).build();

//works
ScanFilter filter = new ScanFilter.Builder().setDeviceAddress(tagMAC).build();

解决方法

我是上面提到的博客文章的作者.以下是解决Android 21问题的方法.
// Empty data
byte[] manData = new byte[]{0,0};

// Data Mask
byte[] 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 filters
ScanFilter 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性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...