2

radius 网络的这篇文讨论了即使设备的硬件支持 BLE,Android 设备不能用作 iBeacons(AKA:BLE 外围模式),因为 Android 没有用于 BLE 外围模式的 API。

注意:BLE 表示蓝牙低功耗

看完本节,我会建议一些愚蠢的东西

因为他们的 SDK 只支持中心角色,所以将服务“广告”为中心服务器意味着他们安静地坐着,只有在连接已经建立后,才以外围模式向另一台设备展示(或“广告”)其服务特性。这种连接建立需要另一个设备首先进行实际的无线电广播。三星的 SDK 不会这样做。

是否有可能欺骗处于中央模式的设备(三星手机)认为处于外围模式的另一台设备已经建立了与它的连接,然后让中央模式“做广告”。您可以通过在软件中伪造连接来欺骗手机吗?

可能是一个愚蠢的想法,可能在中央模式下欺骗设备,但“广告”不是 BLE 外围模式广告,不会像外围模式下的 iBeacon。

我非常需要来自 Android 的 BLE 外围模式支持,目前我可以接受一些黑客攻击,希望 Android 最终能够支持这个功能集,顺便说一句,这已经是一个功能请求

4

1 回答 1

2

我认为这种技术行不通,即使它可以“欺骗”Android 使其认为它与另一个 BLE 设备有连接。尽管这个问题是关于三星 BLE SDK 的,但我认为同样的答案也适用于android.bluetooth.BluetoothAdapter从 Android 4.3 开始提供的专用 Android BLE API ( )。

让我们暂时搁置欺骗部分——即使 Android 确实与另一个 BLE 设备有连接,你能让它做广告吗?如果您所说的“广告”是指向其他设备透露其服务,那么答案是肯定的。但是这种无线电传输是通过两个设备之间的专用通道进行的,并且无法像 iBeacon 广告那样被 BLE 扫描接收到。这根本不是广告——这就是我在博客文章中说三星文档具有误导性的原因。因此,如果您不能通过真正的连接来做到这一点,那么欺骗连接也将不起作用。

我对蓝牙堆栈的理解有限,但我认为扫描可以接收的实际无线电广播广告是由硬件 BLE 芯片组控制的,这意味着您必须有权访问蓝牙堆栈中告诉硬件制作的部分这发生了。我认为三星 BLE SDK 或 Android SDK 中没有任何东西故意允许这样做。

另一种方法可能是对 BlueDroid 堆栈进行直接 JNI 调用。我不确定 Android 权限是否允许这样做,或者是否在 BlueDroid 堆栈中实现了广告。

更新:现在可以在 Android 4.4.3 和 Android L 中作为外设传输。 请参见此处。

于 2013-12-17T21:51:14.960 回答