Android-我可以使用什么API查看设备是否支持BLE中央模式?

时间:2018-12-06 00:57:16

标签: android bluetooth bluetooth-lowenergy android-bluetooth android-ble

https://developer.android.com/guide/topics/connectivity/bluetooth-le#roles

  

中央与外围。这适用于BLE连接本身。的   处于中心角色的设备进行扫描,寻找广告,然后   外围设备的设备制作广告。

要检查设备是否支持“外围设备” /广告模式,好像可以使用getBluetoothLeAdvertiser()

  

getBluetoothLeAdvertiser

     

在API级别21公共级中添加

     

BluetoothLeAdvertiser getBluetoothLeAdvertiser()返回一个   用于Bluetooth LE广告操作的BluetoothLeAdvertiser对象。   如果蓝牙关闭或蓝牙LE将返回null   此设备不支持广告。

     

使用isMultipleAdvertisementSupported()检查LE Advertising是否   调用此方法之前,此设备支持该功能。

现在我已经听到一些传闻,说某些设备实际上可以为您提供BluetoothLeAdvertiser,但是在isMultipleAdvertisementSupported()上返回false,这本身就是另一个问题,但是从本质上讲,文档没有说任何事情!

我想念什么吗? https://developer.android.com/reference/android/bluetooth/BluetoothAdapter没有说关于中央模式。我在这里缺少基本的东西吗?谢谢你的帮助。我听说蓝牙在Android上很痛苦,这是我探索这些API的第一天。

1 个答案:

答案 0 :(得分:2)

简短回答

正如DigitalNinja所指出的,默认情况下,Android手机将始终支持中央角色功能,因此,如果您的手机支持BLE,那么它肯定可以在中央角色中运行

长期回答

您是对的,该API可能并非一帆风顺,但这取决于蓝牙低功耗(BLE)API如何被添加到Android,甚至取决于BLE技术本身的历史。

首次引入BLE时,其目标是仅用于传感器(例如温度计,心率,接近度等)以及与这些传感器通信的设备。在这种情况下,传感器是外围设备,与这些传感器通信的设备是中央。外围设备是真正的低能耗(LE)设备,因为它们偶尔会做广告和发送数据。另一方面,中心设备的电源效率不高,因为它们必须不断扫描设备,连接到这些设备并负责维护和监视该连接,这意味着与之相比,无线电设备的开启时间更长到外围设备。

将低功耗蓝牙(BLE)API添加到Android后,它仅支持中心角色。换句话说,您可以编写一个Android应用程序来扫描并连接到外围设备(传感器),但是Android设备本身不能充当外围设备(因为假设您不需要Android设备来充当传感器。 )。这是在Android 4.3 (API 18)中完成的。

随着人们开始更频繁地使用BLE并且技术日趋成熟,它开始被用于各种不同的应用程序(例如虚拟串行端口,数据传输,信标等)。此外,独立的中央设备开始在市场上出现,并且有必要在开发阶段将其与手机一起使用,或者至少要针对手机/平板电脑进行测试。因此,中央和外围设备之间的区别开始变得越来越模糊,并且需要Android开始支持外围设备角色。这是BLE API更新为引入外围角色功能的时候,这种情况发生在Android 5.0 (API 21)中。

因此要回答您的问题,如果Android设备支持BLE,则可以安全地声明默认情况下它将支持中心角色,因为这是Android BLE功能的基础。但是,后来引入了API以支持外围设备角色,这就是为什么并非所有支持BLE的Android设备都将支持外围设备角色的原因。

最后,请注意isMultipleAdvertisementSupported是一项不同的功能,它指示您的设备是否支持同时发送多个广告。一些设备支持同时发送不同的广告,而其他设备则不支持。但是,这并不意味着它们根本不支持广告。支持isMultipleAdvertisementSupported的设备肯定会支持BluetoothLeAdvertiser,但不能保证相反。

最后,检查设备是否支持中心和/或外围设备角色的最安全方法是通过Android版本和所使用的API级别,如上面的两个链接所示。从Android 5(API 21)开始,您可以编写支持中心角色和外围角色的应用程序,而在此之前,您只能编写具有中心角色的应用程序。

我希望这会有所帮助。