Android 灯塔图书馆 | IBeacon - 使用移动设备发布多个信标

Android Beacon Library | IBeacon - Advertising multiple beacons using Mobile device

我正在使用 Android 信标库, 版本 -

compile 'org.altbeacon:android-beacon-library:2.15.1'

我正在尝试开发一个用于从我的移动设备传输多个信标的 APK。 我需要执行此测试或 POC 测试,reader 一次可以读取多少个信标。

我正在使用以下代码通过 Android 信标库传输 BLE 消息。

btn_transmit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (isBluetoothEnabled)
                {
                    try
                    {
                        String  customUuid = "";
                        for(int i=0;i<=50;i++)
                        {
                            if( i < 10){
                                customUuid = "99999999-b00"+i+"-4807-b747-9aee23508620";
                            } else if ( i < 999){
                                customUuid = "99999999-b0"+i+"-4807-b747-9aee23508620";
                            }

                            Thread.sleep(5000);
                            trasmitClick(customUuid);
                            beaconTransmitter = null;
                        }
                    }
                    catch(Exception e)
                    {
                        Toast.makeText(BeaconTransmitterActivity.this, "Something went wronggg", Toast.LENGTH_LONG).show();
                    }
                }
                else
                    Toast.makeText(BeaconTransmitterActivity.this, "Check your bluetooth connection", Toast.LENGTH_LONG).show();
            }
        });

在上面,我动态地尝试创建 50 个新 ID 来传输信标。

创建信标并传输其广告的方法

 public void trasmitClick(String customUuid) {

        if (beaconTransmitter == null) {

            String major, minor, uuid;

            uuid = customUuid;
            major = etMajorValue.getText().toString().trim();
            minor = etMinorValue.getText().toString().trim();

            if (TextUtils.isEmpty(uuid))
                uuid = customUuid;
            if (TextUtils.isEmpty(major))
                major = "8";
            if (TextUtils.isEmpty(minor))
                minor = "2";

            currentType=beaconLayout;
            currentuuid=uuid;
            currentmajorValue=major;
            currentminorValue=minor;

            beacon = new Beacon.Builder()
                    .setId1(uuid)
                    .setId2(major)
                    .setId3(minor)
                   //.setManufacturer(0x0118) // It is for AltBeacon.  Change this for other beacon layouts
                    .setManufacturer(0x004C)
                    .setTxPower(-59)
                    //.setDataFields(Arrays.asList(new Long[]{6l, 7l})) // Remove this for beacon layouts without d: fields
                    .build();

            // Change the layout below for other beacon types

            beaconParser = new BeaconParser()
                    .setBeaconLayout(parserLayout[beaconLayout]);

            beaconTransmitter = new BeaconTransmitter(getApplicationContext(), beaconParser);
            beaconTransmitter.startAdvertising(beacon, new AdvertiseCallback() {
                @Override
                public void onStartSuccess(AdvertiseSettings settingsInEffect) {
                    super.onStartSuccess(settingsInEffect);
                }

                @Override
                public void onStartFailure(int errorCode) {
                    super.onStartFailure(errorCode);
                }
            });
            btn_transmit.setText("Stop Advertising");
            btn_apply.setEnabled(false);


        } else {
            beaconTransmitter.startAdvertising();
            beaconTransmitter = null;
            btn_transmit.setText("Start Advertising");
            btn_apply.setEnabled(false);
        }

    }

我能够使这段代码工作,但结果是我只能传输 4 条消息,其余消息在模拟器中不可见。

我正在尝试查找该库是否有一些限制或者我上面的错误。 嗯,我是 Android 编码的新手。

下面是我在模拟器中得到的结果:

我想知道如何一次性发送50条消息

这肯定是您手机上蓝牙芯片的限制 phone。不同的设备型号有不同的广告限制。例如,华为 P9 Lite 一次只能传输一个广告。 Nexus 5x 可以发布 10 个或更多。许多 phone 型号(如果有的话)不太可能同时支持 50 个广告。

无法以编程方式知道限制,因为 OS 没有提供 API 来查询此限制——您只需要尝试一下。您可以通过将代码放入 onStartFailure 回调中来检查何时收到错误广告。

您也可以使用 [BeaconScope]((https://play.google.com/store/apps/details?id=com.davidgyoungtech.beaconscanner) 应用程序对此进行测试。但请记住,传输限制是设备范围内的。如果一个应用程序正在广告信标,则会占用一个广告位来自下一个应用程序。不,没有办法知道其他应用程序是否在投放广告。