Android 4.0中的蓝牙智能(4.0)/ GATT支持?

时间:2012-04-06 09:08:10

标签: android bluetooth android-4.0-ice-cream-sandwich bluetooth-lowenergy

我正试图找到使用现代Android智能手机的蓝牙4.0(AKA蓝牙智能)设备的方法,即 - HTC One V.

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

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

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

阿列克谢

PS:是的,我看过用于HDP的Android API,但它似乎只用于'经典'蓝牙设备(不像BT LE那样低功耗)。

6 个答案:

答案 0 :(得分:26)

不幸的是,由于Android目前根本不支持蓝牙低功耗,因此没有Android原生GATT API。这可能会在即将发布的Android版本中发生变化,但今天制造商却将第三方蓝牙堆栈与高通,Broadcom或CSR等厂商的低能耗支持相集成。那些带有自己的API集合,显然限制了与使用该特定供应商堆栈的电话集的兼容性。 好消息是,在iOS或Windows 8等其他平台上都有原生的GATT BLE API,并且这些API得到了很好的支持。对于Android,我们将不得不等到Google决定将已在BLE上完成的Linux / BlueZ工作与Android集成。

答案 1 :(得分:13)

经过一番研究后我才能说出来:

  • 摩托罗拉支持Broadcom开发专有API。它似乎非常有限,因为它表示只支持现有的配置文件。请查看here

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

  • 谷歌在这方面几乎没有发表任何言论。在Galaxy Nexus中有一个关于这个问题的thread,你应该为很多人抱怨。可以找到最接近Google答案的内容here

<强> [UPDATE]

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

  • BluetoothAdapter
  • BluetoothDevice

<强> [UPDATE]

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

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次中发现BLE设备2。 并且记住,这仅适用于 SGSIII 。我还没有在BluetoothDevice中提取新方法,但是当我这样做时,我会在这里发布它们。

答案 2 :(得分:2)

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

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

在我的Nexus 4上进行测试会使蓝牙堆崩溃。

答案 3 :(得分:1)

自去年以来,HTC已经获得了HTC One X +,Droid DNA以及HTC One的BLE支持。最初HTC BLE API是根据要求提供的,但现在可以在http://htcdev.com免费下载。

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

答案 4 :(得分:0)

答案 5 :(得分:0)

正如所发现的那样,4.3支持BLE,但它已经破坏了,尤其是在Nexus设备上。 在我看来,它还没有为生产做好准备。