Beacon UUID在扫描时有所不同

时间:2016-01-30 18:12:06

标签: android bluetooth ibeacon-android altbeacon android-ibeacon

我试图使用altbeacon找出信标的UUID,并使用下面的代码检测到信标,

beaconManager.setRangeNotifier(new RangeNotifier(){         @override

public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
    if (beacons.size() > 0) {
        for (Beacon beacon : beacons) {   

        String uuid = beacon.getId1().toString();
        ...
}

但问题是我的实际信标UUID是

E2C56DB5-DFFB48D2-B060D0F5-A71096E0

上面的代码给我的是uuid

e2c56db5-dffb-48d2-b060-d0f5a71096e0

基本上两者都是相同的,除了 - UUID上的 - 符号位置不同,这在我的应用程序上造成了一些问题

可能是什么问题?

修改

如果需要,我可以发布更多代码。

2 个答案:

答案 0 :(得分:2)

一种解决方案是从两者中取出所有破折号,然后将它们转换为大写并进行比较。

将当前的uuid修复为高位,没有短划线(使用System.Linq):

uuid = new string(uuid.Where(c => c != '-').ToArray()).ToUpper();

这会改变你的uuid:

e2c56db5-dffb-48d2-b060-d0f5a71096e0

要:

E2C56DB5DFFB48D2B060D0F5A71096E0

答案 1 :(得分:1)

Android Beacon Library返回的UUID格式是标准格式,而数据库中的格式不是。由于您无法轻松更改数据库格式,因此可以使用以下java代码行转换字符串格式:

String uuid = beacon.getId1().toString();
String s2 = s.replaceAll("-", "").toUpperCase();
String alternateFormatUuid = s2.substring(0,8)+"-"+s2.substring(8,16)+"-"+s2.substring(16,24)+"-"+s2.substring(24,32);

我确定有更优雅的方法可以做到这一点,但上面的代码可以完成这项工作。