提问者:小点点

如何在蓝牙广告中使用AdvertisingSetParameters的参数?


我在做一个蓝牙低能耗扫描仪和广告商。 我已经使用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);

共1个答案

匿名用户

AdvertisingSetParameters是Android 8.0中引入的一组新的BLE API的一部分,要求API级别为26。 问题中显示的startadministration方法是Android 5.0以前的BLE API的一部分,只需要API级别21。 StartAdverting方法不允许您使用AdvertisingSetParameters

要应用AdvertisingSetParameters,只需使用此处介绍的较新的StartAdvertisingSet方法。