如何知道另一个 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)。您可以先体验一下,然后再编写自己的代码。
作为实现的框架,我可以想到几个选择:
- Bluetooth LE scanner and advertiser API 比较低
- Nearby Messages API哪个级别更高
- 第三方 API,例如Android Beacon Library
选项很少。
您可以使用低功耗蓝牙 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 编写代码。如果您有任何问题,请随时给我们写信!
假设我想制作一个将安装在 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)。您可以先体验一下,然后再编写自己的代码。
作为实现的框架,我可以想到几个选择:
- Bluetooth LE scanner and advertiser API 比较低
- Nearby Messages API哪个级别更高
- 第三方 API,例如Android Beacon Library
选项很少。
您可以使用低功耗蓝牙 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 编写代码。如果您有任何问题,请随时给我们写信!