AltBeacon api return 测距信标时清空集合

AltBeacon api return empty collection while ranging beacons

我正在尝试对信标进行测距,我正在做的正是此处所写的内容: http://altbeacon.github.io/android-beacon-library/samples.html

didRangeBeaconsInRegion 方法正在触发,但集合始终为空。

我已经通过 altbeacon 安装了 "locate",它找到了 3 个信标。

这是我的代码:我是不是遗漏了什么?

public  class BeaconSingletone implements BeaconConsumer {

    private static BeaconSingletone instance;

    private final org.altbeacon.beacon.BeaconManager beaconManager2;
    private  ArrayList<BeaconThin> listNearBeacons = new ArrayList<>();




    BeaconRegion region = new BeaconRegion("ranged region",
                              UUID.fromString("B9407F30-F5F8-466E-AFF9-25556B57FE6D"), null, null);

    private List<EventInterface> listeners = new ArrayList<EventInterface>();

    private BeaconSingletone()
    {

        beaconManager2 = org.altbeacon.beacon.BeaconManager.getInstanceForApplication(ar_activity.get());
        // To detect proprietary beacons, you must add a line like below corresponding to your beacon
        // type.  Do a web search for "setBeaconLayout" to get the proper expression.
         beaconManager2.getBeaconParsers().add(new BeaconParser().
                setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));
        beaconManager2.bind(this);



    public static BeaconSingletone getInstance() {
        if(instance == null) {
            instance = new BeaconSingletone();
        }
        return instance;
    }
    private void showNotification(Region region, final List<Beacon> list) {
        listNearBeacons.clear();
        listNearBeacons.add(new BeaconThin(3514,7580,-1));
        for (Iterator<EventInterface> i = listeners.iterator(); i.hasNext(); ) {
            EventInterface item = i.next();
            //item.NewBeaconFound(list.get(0).getMajor(),list.get(0).getMinor(),Utils.computeAccuracy(list.get(0)));
            item.NewBeaconsFound(listNearBeacons);
        }
        return;




    }



    @Override
    public void onBeaconServiceConnect() {
        beaconManager2.addRangeNotifier(new RangeNotifier() {
            @Override
            public void didRangeBeaconsInRegion(Collection<org.altbeacon.beacon.Beacon> beacons, org.altbeacon.beacon.Region region) {
                if (beacons.size() > 0) {
                    Log.i("BeaconManager", "The first beacon I see is about "+beacons.iterator().next().getDistance()+" meters away.");
                }
            }
        });
        try {
            beaconManager2.startRangingBeaconsInRegion(new org.altbeacon.beacon.Region("mybeacons", null, null, null));
        } catch (RemoteException e) {    }{


    }

    }

    @Override
    public Context getApplicationContext() {
        return ar_activity.get();
    }

    @Override
    public void unbindService(ServiceConnection serviceConnection) {
        ar_activity.get().unbindService(serviceConnection);
    }

    @Override
    public boolean bindService(Intent intent, ServiceConnection serviceConnection, int i) {
        return ar_activity.get().bindService(intent, serviceConnection, i);
    }
}

您需要为正在使用的信标类型(iBeacon?)添加信标布局。替换此行:

beaconManager2.getBeaconParsers().add(新的 BeaconParser()。 setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));

使用此处的适当布局: https://beaconlayout.wordpress.com