Android AltBeacon 通告功率和可见范围

Android AltBeacon Advertise Power and Visibility Range

Android AltBeacon 库和 Android 信标 API 提供选项来设置通告信标的通告功率。可用的设置有高、中、低和超低。在我的测试过程中,我没有发现超低和低能见度范围有任何差异。我想了解每个功率级别的能见度范围是多少。我是否需要考虑任何其他设置来提高广告能力和可见性范围?知道不同广告功率及其频率对电池有什么影响吗?我如何决定使用什么设置以及何时使用?

void startBeacon() {

    if (!beaconTransmitter.isStarted()) {
        try {
            String id1 = editTextUUID.getText().toString();
            String id2 = "1";
            String id3 = "2";

            final String advertizeMode =
                    ((RadioButton) findViewById(advrtzFreqRadioButtonGroup.getCheckedRadioButtonId()))
                            .getText().toString();
            if (advertizeMode.equals("LOW_POWER")) {
                beaconTransmitter.setAdvertiseMode(ADVERTISE_MODE_LOW_POWER);
            } else if (advertizeMode.equals("BALANCED")) {
                beaconTransmitter.setAdvertiseMode(ADVERTISE_MODE_BALANCED);
            } else if (advertizeMode.equals("LOW_LATENCY")) {
                beaconTransmitter.setAdvertiseMode(ADVERTISE_MODE_LOW_LATENCY);
            }

            final String advertizePower =
                    ((RadioButton) findViewById(advrtzPowerRadioButtonGroup.getCheckedRadioButtonId()))
                            .getText().toString();
            if (advertizePower.equals("ULTRA_LOW")) {
                beaconTransmitter.setAdvertiseTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_ULTRA_LOW);
            } else if (advertizePower.equals("LOW")) {
                beaconTransmitter.setAdvertiseTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_LOW);
            } else if (advertizePower.equals("MEDIUM")) {
                beaconTransmitter.setAdvertiseTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM);
            } else if (advertizePower.equals("HIGH")) {
                beaconTransmitter.setAdvertiseTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH);
            }

            int transmissionPower = Integer.parseInt(editTextTxPower.getText().toString());
            beacon = new Beacon.Builder()
                    .setId1(id1)
                    .setId2(id2)
                    .setId3(id3)
                    .setManufacturer(0x0118)
                    .setTxPower(transmissionPower)
                    .setDataFields(Arrays.asList(new Long[]{0l}))
                    .build();

            beaconTransmitter.startAdvertising(beacon);

            Log.d(TAG, "startAdvertising started");

            textViewStatus.setText("startAdvertising started...");

        } catch (Exception e) {
            Log.d(TAG, e.getMessage());
            textViewStatus.setText("Error:" + e.getMessage());
        }
    } else {
        Log.d(TAG, "Already dvertising");
        textViewStatus.setText("Already startAdvertising...");
    }

    button.setText("Stop Beacon");
}

不同的发射器功率设置由底层AndroidOSAPIs提供,并不特定于Android信标库。实际差异不同功率级别之间的差异因设备型号而异。例如,在 Nexus 4 上,我用来测试这个 API 的第一台设备,在任何范围内都检测不到超低电平。由于缺乏可靠性,我会说这种超低设置对于任何生产目的都是不可取的。

所有设备上的高设置通常都相似,因为它受到监管机构的限制,以防止更高(非法)功率水平的无线电干扰。它确实会根据每个设备的天线、天线放置和外壳而有所不同,通常在一米处约为 -59 dBm。

即使在全功率状态下,广告信标也不会导致显着的phone 电池消耗。与电池待机、屏幕或 CPU activity 等其他消耗源相比,所使用的能量微不足道。使用的功率非常低,很难测量。令人惊讶但真实!

除了高功率设置的用例很少见。它有时对测试很有用。低功率电平也可用于限制检测范围,但在接收端使用最小 RSSI 阈值可以更可靠地处理这种情况,因为让发射器保持最大功率可提供更高的信噪比和更可靠的检测。仅当您无法在用例中控制接收器代码(添加最小 RSSI 滤波器)时,才应降低发射器功率以限制检测范围。