BLE реклама с разными пакетами данных в android

Я новичок в рекламе с низким энергопотреблением Bluetooth. BLE поддерживает динамическую рекламу с уровня API 28, так как вы можете рекламировать различные пакеты данных. Я пытаюсь это сделать, но получаю код статуса 18 и Null в наборе рекламы. Подскажите, пожалуйста, как сделать динамическую рекламу в android. Мое устройство - Nexus 6 с Android 8.1.0.

вот мой код:

 //setting parameters

AdvertisingSetParameters parameters = (new AdvertisingSetParameters.Builder())
            .setLegacyMode(false)
            .setConnectable(true)
            .setInterval(AdvertisingSetParameters.INTERVAL_HIGH)
            .setTxPowerLevel(AdvertisingSetParameters.TX_POWER_MEDIUM)
            .build();

//Adding advertising data

AdvertiseData.Builder mbuilder = new AdvertiseData.Builder();
    mbuilder.setIncludeDeviceName(false);
    mbuilder.setIncludeTxPowerLevel(false);

mbuilder.addManufacturerData(Integer.parseInt(manuf, 16), manufacturerData1);
    AdvertiseData mData = mbuilder.build();

//Adding scan response data

AdvertiseData scanResponse = new AdvertiseData.Builder()
            .setIncludeDeviceName(true)
            .build();

//Advertising set call back and I am receiving null in Advertising set and status code 18

AdvertisingSetCallback callback = new AdvertisingSetCallback() {
        @Override
        public void onAdvertisingSetStarted(AdvertisingSet advertisingSet, int txPower, int status) {
            Log.i("", "onAdvertisingSetStarted(): txPower:" + txPower + " , status: "
                    + status);

            if (status==AdvertisingSetCallback.ADVERTISE_FAILED_ALREADY_STARTED)
                Toast.makeText(context, "ADVERTISE_FAILED_ALREADY_STARTED", Toast.LENGTH_SHORT).show();
            else if (status==AdvertisingSetCallback.ADVERTISE_FAILED_FEATURE_UNSUPPORTED)
                Toast.makeText(context, "ADVERTISE_FAILED_FEATURE_UNSUPPORTED", Toast.LENGTH_SHORT).show();
            else if (status==AdvertisingSetCallback.ADVERTISE_FAILED_DATA_TOO_LARGE)
                Toast.makeText(context, "ADVERTISE_FAILED_DATA_TOO_LARGE", Toast.LENGTH_SHORT).show();
            else if (status==AdvertisingSetCallback.ADVERTISE_FAILED_INTERNAL_ERROR)
                Toast.makeText(context, "ADVERTISE_FAILED_INTERNAL_ERROR", Toast.LENGTH_SHORT).show();
            else if (status==AdvertisingSetCallback.ADVERTISE_FAILED_TOO_MANY_ADVERTISERS)
                Toast.makeText(context, "ADVERTISE_FAILED_TOO_MANY_ADVERTISERS", Toast.LENGTH_SHORT).show();
            else if (status==AdvertisingSetCallback.ADVERTISE_SUCCESS)
                Toast.makeText(context, "ADVERTISE_SUCCESS", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onAdvertisingSetStopped(AdvertisingSet advertisingSet) {
            Log.i("", "onAdvertisingSetStopped():");
        }
    };

//starting advertisement

    mBluetoothLeAdvertiser.startAdvertisingSet(parameters, mData, scanResponse, null, null, callback);
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
1 827
1

Ответы 1

Вам действительно нужен "scanResponse"? На моем устройстве установлены BLE 5.0 и Android 9.0. Если я передаю «null» вместо «scanResponse», то текущий объект и правильный статус возвращаются функции обратного вызова. Но если я передам «scanResponse», то получит «нулевой» объект и «статус» 18.

Если изменить

mBluetoothLeAdvertiser.startAdvertisingSet(parameters, mData, scanResponse, null, null, callback);

на

mBluetoothLeAdvertiser.startAdvertisingSet(parameters, mData, null, null, null, callback);

все работает для меня, и я могу сканировать сигнал BLE 5 со своего смартфона на других устройствах.

Вот учебник. вы можете проверить это по этой ссылке: source.android.com/devices/bluetooth/ble_advertising, и я также запускаю его с помощью ScanResponse, но у меня не получилось. Что ж, у меня есть причина этого. Функция StartAdvertisingSet появилась в API lvl 26, и для этого нам понадобится Bluetooth 5.0. и у моего устройства есть Bluetooth 4.2. вот почему я получаю СТАТУС 18. Надеюсь, это поможет и вам.

Fahad Shahid 12.01.2019 05:40

Другие вопросы по теме