android - 可以破解 Android 中的 BLE 外设模式支持吗?

标签 android bluetooth bluetooth-lowenergy ibeacon-android

这个blog post来自 Radius Networks 的文章讨论了 Android 设备如何无法用作 iBeacons(又名:BLE 外设模式),即使设备的硬件支持 BLE,因为 Android 没有用于 BLE 外设模式的 API。

注意:BLE 表示低功耗蓝牙

读完本节后,我会提出一些愚蠢的建议

Because their SDK only supports the central role, “advertising” a service as a central server means sitting their quietly, only revealing (or “advertising”) its service characteristics to another device in peripheral mode after a connection is already established. This connection establishment requires another device to do the actual radio advertising first. Samsung’s SDK isn’t going to do it.

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

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

我非常需要 Android 的 BLE 外设模式支持,目前我可以接受一些修改,希望 Android 最终能够支持这个功能集,顺便说一句,该功能集已经是 feature request

最佳答案

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

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

我对蓝牙堆栈的理解是有限的,但我认为扫描可以拾取的实际 radio 广播广告是由硬件 BLE 芯片组控制的,这意味着您必须能够访问蓝牙堆栈中告诉您的信息的部分。硬件来实现这一点。我认为 Samsung BLE SDK 或 Android SDK 中没有任何内容有意允许这样做。

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

更新:现在可以在 Android 4.4.3 和 Android L 中作为外围设备进行传输。See here.

关于android - 可以破解 Android 中的 BLE 外设模式支持吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20644907/

相关文章:

linux - 不添加使用 bluez 的 GATT 服务?

ios - iOS 能否同时通过蓝牙和设备扬声器播放两个独立的音频流?

Android POS 打印机 ESC/POS

java - 如何正确使用 UUID.fromString 方法?

iOS 广告间隔(iPhone 作为外设)

java - 如何在 Android 中清除 HttpURLConnection 的缓存?

android - 创建多个静态布局或创建数据库?

android - 哪种算法适合情况分析?

java - 在 Android 上使用 Google Recaptcha

ios - 是否可以使用 HM-10 或 HM-11 BLE 模块与 Arduino 与 iOS 设备 (ANCS) 进行通信?