Android AltBeacon广告功能和可见性范围

时间:2019-02-02 02:38:42

标签: android altbeacon

Android AltBeacon库和Android Beacon 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");
}

1 个答案:

答案 0 :(得分:0)

不同的发射器功率设置由基础的Android OS API提供,并且不特定于Android信标库。.不同功率水平之间的实际差异会因设备型号而有很大差异。例如,在Nexus 4(我用来测试该API的第一台设备)上,在任何范围内根本无法检测到超低水平。我会说,由于缺乏可靠性,对于任何生产目的都不建议使用这种超低设置。

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

即使在满功率的情况下,广告信标也不会造成大量电话电池消耗。与其他耗电来源(如单元待机,屏幕或CPU活动)相比,所消耗的能量微不足道。使用的功率是如此之低,难以测量。令人惊讶但真实!

除高以外的电源设置用例很少。有时对测试很有用。低功率电平对于限制检测范围也很有用,但是通过在接收侧使用最小RSSI阈值可以更可靠地处理此问题,因为将发送器置于最大功率可以提供更高的信噪比和更可靠的检测。只有在用例中无法控制接收器代码(添加最小RSSI过滤器)的情况下,才应降低发射器功率以限制检测范围。