Android Beacon Library |IBeacon - реклама нескольких маяков с помощью мобильного устройства - PullRequest
0 голосов
/ 11 сентября 2018

Я использую библиотеку маяков Android с версией -

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

Я пытаюсь разработать один APK для передачи нескольких маяков с моего мобильного устройства.Мне нужно выполнить это для проверки или POC для проверки того, сколько маяков может прочитать считыватель за раз.

Я использую приведенный ниже код для передачи сообщений BLE с помощью библиотеки маяков Android.

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 новых идентификаторов для передачи маяков.

Метод для создания маяка и передачи его рекламы

 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 голосов
/ 11 сентября 2018

Это, безусловно, ограничение чипа Bluetooth на вашем мобильном телефоне.Разные модели устройств имеют разные рекламные ограничения.Например, Huawei P9 Lite может одновременно передавать только одну рекламу.Nexus 5x может рекламировать 10 или более.Маловероятно, что многие модели телефонов (если таковые имеются) поддерживают 50 одновременных рекламных объявлений.

Нет способа узнать ограничение программно, поскольку ОС не предоставляет API для запроса этого ограничения - вам просто нужно попробовать.Вы можете проверить, когда вы получаете сообщение об ошибке, введя код в обратный вызов onStartFailure.

Вы также можете использовать приложение [BeaconScope] ((https://play.google.com/store/apps/details?id=com.davidgyoungtech.beaconscanner) для проверки этого. Но помните, что передачаограничения распространяются на все устройства. Если одно приложение рекламирует маяк, то одно рекламное место отнимает у следующего приложения. И нет, узнать, рекламируются ли другие приложения, невозможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...