【问题标题】:Android 2.1: How do I poll the RSSI value of an existing Bluetooth connection?Android 2.1:如何轮询现有蓝牙连接的 RSSI 值?
【发布时间】:2011-01-10 02:16:52
【问题描述】:

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

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

【问题讨论】:

  • Android 项目的错误跟踪器中有一个条目,它解决了这个问题。如果您想订阅(并推送)有关此问题的程序,您应该加注星标code.google.com/p/android/issues/…

标签: android bluetooth rssi


【解决方案1】:

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

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

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

  • 要测量 RSSI,您必须首先连接到远程设备,至少在低级别(此连接不需要身份验证)并在调用 hci_read_rssi() 后释放连接。这比其他无线通信方式(GSM 或 WIFI)提供的仅从信标测量 RSSI 慢
  • 与远程蓝牙设备的低级别连接需要 Android 超级用户权限。因此,请忘记可以在非黑客手机上运行的编写和应用程序(它们通常没有 root 访问权限,如果您尝试获得它,摩托罗拉 Droid/Milestone 等一些手机甚至会导致保修失效)。

【讨论】:

  • 请注意,这不适用于 4.2,因为堆栈已从 bluez 更改为 broadcom。
  • 尚不清楚hci_read_rssi() 是否是获取RSSI 的正确函数-根据此答案:stackoverflow.com/questions/30025139/…
【解决方案2】:

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

BluetoothGatt.readRemoteRssi()

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

Android docs here

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
相关资源
最近更新 更多