如何知道另一个 phone 何时离我 10m

How to know when another phone is 10m away from me

假设我想制作一个将安装在 2 台设备上的 android 应用程序。我想知道一台设备何时距离另一台设备超过 10 米。我将为此使用什么类型的技术? (即感应卡、rfid、nfc 等)。一般来说,我应该如何在 android 中实现它? 谢谢

低功耗蓝牙 (BLE) 可能是您正在寻找的技术。它在现代 Android phone 中广泛使用,应该可以让您确定 10 米左右范围内的距离。

BLE有其自身的特点和局限性。基本上,随着 2 个设备之间的距离变长,准确度会下降。当有人在附近行走时,信号会波动。我发现 this article 解释得很清楚。

您需要编写一个在 phone A 上运行的信标应用程序来传输数据包。然后另一个在 phone B 上运行的扫描仪应用程序接收数据包并根据信号强度 (RSSI) 估计距离。

已经有充当扫描仪的应用程序(例如https://play.google.com/store/apps/details?id=com.bridou_n.beaconscanner) and beacon (e.g. https://play.google.com/store/apps/details?id=net.alea.beaconsimulator)。您可以先体验一下,然后再编写自己的代码。

作为实现的框架,我可以想到几个选择:

选项很少。

您可以使用低功耗蓝牙 API 并像这样扫描设备。您也可以添加其他设备信息作为过滤器,它将只扫描此设备。

List<ScanFilter> filters = new ArrayList<> ();
filters.add(/*create your scan filter*/);

ScanSettings settings = new ScanSettings.Builder()
    .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
    .build();

ScanCallback callback = new ScanCallback() {
    @Override public void onBatchScanResults(List<ScanResult> results) {
        // Do something with scan results
    }
    @Override public void onScanFailed(int errorCode) {
        // Notify error code
    }
    @Override public void onScanResult(int callbackType, ScanResult result) {
        // Do something with scan result
    }
};

mBluetoothAdapter.getBluetoothLeScanner().startScan(filters, settings, callback);

另一种选择是尝试三星 Active 2 手表,它可以扫描 BLE 并检测其他手表。现在在 Navigine 我们正在与他们合作,他们展示了相当不错的结果。但是,您将需要为 Tizen OS 编写代码。如果您有任何问题,请随时给我们写信!