Ravish Jha
Ravish Jha

Reputation: 445

How use parameters of AdvertisingSetParameters in a bluetooth advertisement?

I am making a Bluetooth Low Energy scanner and advertiser. I have already implemented the advertising using AdvertiseSettings but I want to change some parameters which are only available in AdvertisingSetParameters. There are methods like onStartSuccess() which only take in an object of the class AdvertiseSettings so I am facing a problem adding the parameters to the advertisement to it.

How should I pass the parameters in AdvertisingSetParameters to the advertisement?

The variable advParameter in the code below is something that I use as an input from the user to set the advertising interval.

Code

mBluetoothLeAdvertiser = 

BluetoothAdapter.getDefaultAdapter().getBluetoothLeAdvertiser();

AdvertisingSetParameters parameters = new  AdvertisingSetParameters.Builder()
                                           .setInterval(AdvertisingSetParameters.INTERVAL_HIGH).build();

        switch (advParameter){
            case 0 :
                parameters = new AdvertisingSetParameters.Builder()
                        .setInterval(AdvertisingSetParameters.INTERVAL_HIGH)
                        .setTxPowerLevel(AdvertisingSetParameters.TX_POWER_HIGH)
                        .setConnectable(false)
                        .build();
                break;

            case 1 :
                parameters = new AdvertisingSetParameters.Builder()
                        .setInterval(AdvertisingSetParameters.INTERVAL_MEDIUM)
                        .setTxPowerLevel(AdvertisingSetParameters.TX_POWER_HIGH)
                        .setConnectable(false)
                        .build();
                break;
            case 2 :
                parameters = new AdvertisingSetParameters.Builder()
                        .setInterval(AdvertisingSetParameters.INTERVAL_LOW)
                        .setTxPowerLevel(AdvertisingSetParameters.TX_POWER_HIGH)
                        .setConnectable(false)
                        .build();
                break;
            case 3 :
                parameters = new AdvertisingSetParameters.Builder()
                        .setInterval(AdvertisingSetParameters.INTERVAL_MIN)
                        .setTxPowerLevel(AdvertisingSetParameters.TX_POWER_HIGH)
                        .setConnectable(false)
                        .build();
                break;
            case 4 :
                parameters = new AdvertisingSetParameters.Builder()
                        .setInterval(AdvertisingSetParameters.INTERVAL_MAX)
                        .setTxPowerLevel(AdvertisingSetParameters.TX_POWER_HIGH)
                        .setConnectable(false)
                        .build();
                break;
        }

        AdvertiseSettings settings = new AdvertiseSettings.Builder()
                .setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY)
                .setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH)
                .setConnectable(false)
                .build();

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

        mAdvertiseCallback = new AdvertiseCallback() {

            @Override
            public void onStartSuccess(AdvertiseSettings settingsInEffect) {
                super.onStartSuccess(settingsInEffect);
            }

            @Override
            public void onStartFailure(int errorCode) {
                Log.e(TAG, "Advertising onStartFailure: " + errorCode);
                super.onStartFailure(errorCode);
            }
        };

        mBluetoothLeAdvertiser.startAdvertising(settings, data, mAdvertiseCallback);

Upvotes: 1

Views: 994

Answers (1)

davidgyoung
davidgyoung

Reputation: 64995

The AdvertisingSetParameters are part of a new set of BLE APIs introduced in Android 8.0 requiring API level 26. The startAdvertising method shown in the question is part of the older BLE APIs dating to Android 5.0 requiring only API level 21. The startAdvertising method does not let you use AdvertisingSetParameters.

To apply AdvertisingSetParameters, simply use the newer startAdvertisingSet methods documented here.

Upvotes: 2

Related Questions