Reputation: 445
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
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