我在做一个蓝牙低能耗扫描仪和广告商。 我已经使用AdvertiseSettings
实现了广告,但我想更改仅在AdvertisingSetParameters
中可用的一些参数。 有一些像onStartSuccess()
这样的方法,它们只接受AdvertiseSettings
类的对象,因此我面临一个问题,即向它添加广告的参数。
如何将AdvertisingSetParameters
中的参数传递给广告?
下面代码中的变量advParameter
是用户用来设置广告间隔的输入。
代码
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);
AdvertisingSetParameters
是Android 8.0中引入的一组新的BLE API的一部分,要求API级别为26。 问题中显示的startadministration
方法是Android 5.0以前的BLE API的一部分,只需要API级别21。 StartAdverting
方法不允许您使用AdvertisingSetParameters
。
要应用AdvertisingSetParameters
,只需使用此处介绍的较新的StartAdvertisingSet
方法。