【问题标题】:How to get connect with closest bluetooth low energy device from android ?如何从 android 连接最近的蓝牙低功耗设备?
【发布时间】:2025-12-04 20:35:01
【问题描述】:

我想连接最近的 ble 设备。如何获取/计算与 rssi 的最近距离?

例如,一个房间有 2 台 ble 设备。当我走进那个房间时,我的 android 设备将连接到离我最近的 ble 设备。

我正在使用 don cordova 插件和 javascript 。这个项目在安卓设备上运行。

【问题讨论】:

  • RSSI 越高,一般设备越冷。但由于设备的 TX 强度设置,它可能不正确。
  • 哪个更好,使用最高 rssi 还是先计算距离以米为单位?我找到了它的公式developer.radiusnetworks.com/2014/12/04/…
  • 您无法计算与 RSSI 的距离。没有办法。您甚至可能面临更近的设备的 RSSI 较低的情况

标签: android bluetooth bluetooth-lowenergy


【解决方案1】:

您可以使用 Android Beacon 库: https://altbeacon.github.io/android-beacon-library/

它提供距离读数(不准确),但您可以使用它们来检测哪个信标更近。

一个例子:

public class RangingActivity extends Activity implements BeaconConsumer {
    protected static final String TAG = "RangingActivity";
    private BeaconManager beaconManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ranging);
        beaconManager = BeaconManager.getInstanceForApplication(this);
        beaconManager.bind(this);
    }
    @Override 
    protected void onDestroy() {
        super.onDestroy();
        beaconManager.unbind(this);
    }
    @Override
    public void onBeaconServiceConnect() {
        beaconManager.addRangeNotifier(new RangeNotifier() {
            @Override 
            public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
                if (beacons.size() > 0) {
                    Log.i(TAG, "The first beacon I see is about "+beacons.iterator().next().getDistance()+" meters away.");        
                }
            }
        });

        try {
            beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));
        } catch (RemoteException e) {    }
    }
}

否则,您可以读取设备的 RSSI,并在一段时间内对它们进行平均,然后取出异常值。越接近的将越大(在幅度上,更积极)。

【讨论】: