15

我需要知道使用 Android 2.1 手机与远程设备建立蓝牙连接的信号强度。从 SDK 可以看出,我可以在发现远程设备时确定 RSSI。但我看不到如何随着时间的推移更新该 RSSI 值。

有人可以帮帮我吗?谢谢!!

4

2 回答 2

16

从 SDK 获取 RSSI 是唯一的方法。这有点不方便,因为如果您只想定期监控配对设备的信号强度,它就没有用了。

然而有一种方法,但在 SDK 之外。您可以使用原生 API(通过 NDK)和调用 Bluez API 提供的函数,Bluez API是 Android(以及几乎所有 linux 系统)中的底层蓝牙框架。有问题的功能hci_read_rssi()libbluetooth.so(Bluez 堆栈的一部分)提供。为了了解如何使用它,您可以查看Hcidump 工具源(Bluez 附带)。您可以为您的函数编写一个 JNI 包装器代码,这样您就可以获得配对设备的信号强度。

使用这种方法有两个缺点:

  • 要测量 RSSI,您必须首先连接到远程设备,至少在低级别(此连接不需要身份验证)并在调用后释放连接hci_read_rssi()。这比仅从信标测量 RSSI 慢,因为其他无线通信方式提供(GSM 或 WIFI)
  • 与远程蓝牙设备的低级别连接需要 Android 超级用户权限。所以忘记可以在非黑客手机上运行的编写和应用程序(它们通常没有 root 访问权限,如果你试图获得它,像 Motorola Droid/Milestone 这样的一些甚至会使保修失效)。
于 2010-03-02T08:03:02.807 回答
1

遗憾的是不适用于 Android 2.1,但请查看此 API for level 18 (Android 4.3),您可以对其进行投票:

BluetoothGatt.readRemoteRssi()

读取已连接远程设备的 RSSI。

在此处查看Android 文档

于 2016-01-22T10:18:58.490 回答