java - 使用蓝牙获取两个 Android 设备之间的距离

标签 java android bluetooth distance rssi

我在 SO 上发现了很多类似的问题。但大多数都不起作用或者已经过时了。

我正在尝试构建一个使用蓝牙扫描附近设备的 Android 应用程序,我希望该应用程序在手机距离近 2 米时提醒用户。

所以我尝试使用在 SO 上找到的以下方法来获取距离。

protected double calculateDistance(float txPower, double rssi) {

    if (rssi == 0) {
        return -1.0; // if we cannot determine distance, return -1.
    }

    double ratio = rssi * 1.0 / txPower;

    if (ratio < 1.0) {
        return Math.pow(ratio, 10);
    } else {
        double accuracy = (0.89976) * Math.pow(ratio, 7.7095) + 0.111;
        return accuracy;
    }
}

该方法返回一个奇怪的小数字,我认为它甚至不是距离,因为即使手机位于同一位置,它也会不断变化。

知道如何获得准确的距离吗?

最佳答案

适合那些正在寻找设备之间距离的人。经过大量的研究和搜索,我发现获得准确或精确的距离并不是一件容易实现的事情。 Android 和 Apple 仍在开发此类产品。

由于我急于寻求解决方案,所以我使用的解决方法是名为 Nearby Messages API 的东西。 。

它是一个发布-订阅 API,适用于 Android 和 iOS。它使用特定的 MessageListener 捕获订阅特定 Message 的附近设备。您可以向监听器添加一些策略,以便了解距离是否真的接近EARSHOT

这正是我所需要的,所以对我有用。

关于java - 使用蓝牙获取两个 Android 设备之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61795496/

相关文章:

java - 用于 REST 网络服务的 junit?

android - 如何通过应用内购买将付费应用转换为免费应用?

android - 使用 Intent.ACTION_SEND_MULTIPLE 通过蓝牙发送多个文件

android - 是否可以通过 wifi 在 2 个 android 设备之间交换消息?

android - 从 NFC 和 Android 开始

java - 如何在黑莓中为ListField设置FieldChangeListener?

java - 定时器/ActionListener 用法

java - 在内存中存储等距网格的最佳方法是什么?

java - 不同版本的相同jar中的重复类-Android

android - 当应用程序重置数据时如何取消定期同步?卸载该应用程序后如何删​​除相关帐户?