首页 > 解决方案 > EddyStone URL 无法在 Android 应用程序上正确显示?

问题描述

所以我最近一直在学习信标,我试图开发一个应用程序来扫描我周围的信标并获取它们的 url,我似乎很难理解我应该为信标选择什么布局,应该是 EDDYSTONE_URL,如果是这样,我应该如何在 android 应用程序中检索这个 url,这就是我所做的:

    public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
    for (Beacon beacon : beacons) {
        if (!rangingMessageRaised && beacon.getServiceUuid() == 0xfeaa) {
            // This is a Eddystone-UID frame
            Identifier namespaceId = beacon.getId1();
            Identifier instanceId = beacon.getId2();
            String url = UrlBeaconUrlCompressor.uncompress(beacon.getId1().toByteArray());
            showAlert(TAG, "I see a beacon transmitting a url: " + url +
                    " approximately " + beacon.getDistance() + " meters away.");


            if (beacon.getExtraDataFields().size() > 0) {
                long telemetryVersion = beacon.getExtraDataFields().get(0);
                long batteryMilliVolts = beacon.getExtraDataFields().get(1);
                long pduCount = beacon.getExtraDataFields().get(3);
                long uptime = beacon.getExtraDataFields().get(4);

                Log.d(TAG, "The above beacon is sending telemetry version " + telemetryVersion +
                        ", has been up for : " + uptime + " seconds" +
                        ", has a battery level of " + batteryMilliVolts + " mV" +
                        ", and has transmitted " + pduCount + " advertisements.");

            }
        }
    }
    rangingMessageRaised=true;
}

设置信标布局的代码:

    // Detect the URL frame:


beaconManager.getBeaconParsers().add(new BeaconParser().
             setBeaconLayout(BeaconParser.EDDYSTONE_URL_LAYOUT));
beaconManager.bind(this);

我用于 EDDYSTONE_URL 的标识符在创建信标区域时是:

try {
    beaconRegion = new
    Region("MyBeacons", null,null,null);
    //I initially wrote this for EDDYSTONE_UID 
    //which seems to work for getting UID 
    // And distance but not url

    //Identifier myBeaconNamespaceId =  
    //Identifier.parse("0x2f234454f4911ba9ffa6");
    // Identifier myBeaconInstanceId
    //Identifier.parse("0x000000000001");
    //  Region region = new Region("my- beacon-region", myBeaconNamespaceId, myBeaconInstanceId, null);
    beaconManager.startMonitoringBeaconsInRegion(beaconRegion);
    beaconManager.startRangingBeaconsInRegion(beaconRegion);
        } catch (RemoteException e) {
        e.printStackTrace();
      }
    }

我为信标布局 EDDYSTONE_URL 得到的输出是:

“我看到一个信标传输一个 url:DT∆ws#2 大约 0.00969 米远”。

url 似乎被编码或给出了一个非常奇怪的值,也许是我正在应用 url 解压缩器的 beacon.getId1() 的问题。

标签: javaandroidbeaconaltbeaconeddystone-url

解决方案


推荐阅读