我正在制作蓝牙低功耗扫描仪和广告客户。我已经使用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。问题中显示的startAdvertising
方法是较早的BLE API的一部分,该版本可追溯到仅要求API级别21的Android 5.0。 startAdvertising
方法不允许您使用AdvertisingSetParameters
。
要应用AdvertisingSetParameters
,只需使用startAdvertisingSet
中记录的较新的here方法。