28

我正在尝试寻找使用现代 Android 智能手机的蓝牙 4.0(又名蓝牙智能)设备的方法,即 - HTC One V。

据我了解,由于 API 限制,即使在具有蓝牙 4.0 硬件的 Android 4.0 中使用 GATT 配置文件也存在一些问题。

我看到摩托罗拉为 BT LE 发布了它自己的 API,但不确定它是否适用于其他供应商。我的目标是获得对所有配备适当硬件的智能手机的普遍支持。

任何解决方案的建议都受到高度赞赏。

阿列克谢

PS:是的,我看到了用于 HDP 的 Android API,但它似乎只用于“经典”蓝牙设备(不是低能耗设备,如 BT LE 那样)。

4

6 回答 6

26

不幸的是,没有 Android 原生 GATT API,因为 Android 目前根本不支持低功耗蓝牙。这可能会在即将发布的 Android 版本中发生变化,但如今制造商将第 3 方蓝牙堆栈与高通、博通或 CSR 等供应商的低功耗支持集成在一起。它们带有自己的 API 集,显然限制了对使用该特定供应商堆栈的手机集的兼容性。好消息是,在 iOS 或 Windows 8 等其他平台上,有本地 GATT BLE API,并且得到了很好的支持。对于 Android,我们将不得不等到 Google 决定将在 BLE 上完成的 Linux/BlueZ 工作与 Android 集成。

于 2012-04-09T08:55:15.727 回答
13

经过一番研究,我只能这样说:

  • 摩托罗拉支持博通开发专有 API。它似乎非常有限,因为它声明仅支持现有配置文件。在这里查看。

  • 三星未能提供有关其 BLE API 的任何信息,我可以验证这些信息是否存在,名为 samsung.bluetoothle。实际上,我从 Google Play 反编译了一些使用 SGSIII 的 BLE 功能的应用程序,发现了一些在 Android 的原生 BT API 中不存在的方法,它们的名称清楚地表明它们与 BLE 相关。我已经尝试通过 java 反射使用它们,目前正在研究开发库的可能性。但到目前为止,我进行的测试充其量只能得到不稳定的结果。三星的开发者论坛上也有一个帖子,如果你有兴趣,我建议在这里施加压力。

  • 谷歌在这方面几乎没有表态。Galaxy Nexus中有一个关于这个问题的帖子,你应该给它加注,很多人都在抱怨。可以在此处找到最接近 Google 答案的内容。

[更新]

三星还修改了几个 Android 的类,更具体地说:

  • BluetoothAdapter
  • BluetoothDevice

[更新]

由于缺乏谷歌和三星的支持,我已经把这个问题搁置了一段时间,我将发布我到目前为止所学到的内容:

BluetoothAdapter新方法:

public boolean android.bluetooth.BluetoothAdapter.leTestEnd()
public boolean android.bluetooth.BluetoothAdapter.setAvStreaming(boolean)
public boolean android.bluetooth.BluetoothAdapter.setScanLE(boolean)
public void android.bluetooth.BluetoothAdapter.setScoPathChange(int)
public boolean android.bluetooth.BluetoothAdapter.startLeDiscovery()

要使用它们,请执行以下操作:

BluetoothAdapter ba = new BluetoothAdapter();
Method starteLeDiscoveryMethod = null;
starteLeDiscoveryMethod = ba.class.getMethod("startLeDiscovery");
starteLeDiscoveryMethod.invoke(ba);

注意:这种方法的工作原理特别像常规startDiscovery()方法,但至少对我来说,它在 5 次中发现了 2 个 BLE 设备。请记住,这仅适用于SGSIII。我还没有开始提取新方法,BluetoothDevice但是当我这样做时,我会在这里发布它们。

于 2012-11-28T08:39:37.133 回答
2

SDK 18 现在支持它。文档在这里:

http://developer.android.com/guide/topics/connectivity/bluetooth-le.html

在我的 Nexus 4 上进行的测试导致蓝牙堆栈崩溃。

于 2013-08-01T21:26:30.163 回答
1

HTC 从去年开始就支持 BLE,包括 HTC One X+、Droid DNA,当然还有 HTC One。最初 HTC BLE API 是应要求提供的,但现在可以在http://htcdev.com免费下载。

是的,来自 Google 的 Android API 级别 18 的新标准 Android BLE API 即将推出(参见 IO 视频预览) - 但您可以以兼容的方式包装第三方 API(HTC、三星等)以支持新标准 API因为所有 API 在支持 GATT 配置文件方面都非常相似(类似于 IOS)。

于 2013-06-12T18:24:38.727 回答
0

Android 中可用的 BluetoothGatt api

https://developer.android.com/reference/android/bluetooth/BluetoothGatt.html

于 2014-05-30T05:38:19.983 回答
0

正如我们所发现的,4.3 支持 BLE,但它非常糟糕,尤其是在 Nexus 设备上。在我看来,它还没有准备好投入生产。

于 2014-06-03T10:42:49.103 回答