Android信标库| IBeacon-使用移动设备广告多个信标

时间:2018-09-11 06:31:38

标签: android bluetooth-lowenergy ibeacon ibeacon-android

我正在使用Android beacon库, 版本-

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

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

我正在使用以下代码通过Android Beacon库传输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以传输信标。

createBeacon并传输其广告的方法

 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编程的新手。

以下是我可以在模拟器中得到的结果: enter image description here

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

1 个答案:

答案 0 :(得分:1)

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

由于操作系统没有提供API来查询此限制,因此无法以编程方式知道该限制-您只需尝试一下即可。您可以通过将代码放入onStartFailure回调中来检查何时收到错误的广告。

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