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

问题描述 投票:0回答:1

我正在制作蓝牙低功耗扫描仪和广告客户。我已经使用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);
android android-studio bluetooth bluetooth-lowenergy beacon
1个回答
0
投票

AdvertisingSetParameters是Android 8.0中引入的一组新的BLE API的一部分,需要API级别26。问题中显示的startAdvertising方法是较早的BLE API的一部分,该版本可追溯到仅要求API级别21的Android 5.0。 startAdvertising方法不允许您使用AdvertisingSetParameters

要应用AdvertisingSetParameters,只需使用startAdvertisingSet中记录的较新的here方法。

© www.soinside.com 2019 - 2024. All rights reserved.