Android 4.3 BTLE作为服务器:如何开始广告?

时间:2013-08-08 14:11:21

标签: android bluetooth-lowenergy

我正在尝试使用4.3中的新BTLE API在Nexus 7上实现BTLE SERVER。我遇到了几个问题。首先,SDK没有示例。唯一的例子是客户。其次,文档实际上告诉你做错了。它声明必须使用BluetoothAdapter.getProfileProxy() with a BluetoothProfile.GATT_SERVER参数来获取BluetoothGattServer对象。这种方法可行,但是人们无法将BluetoothGattServerCallback的一个实现链接到BLE堆栈。 (这个回调就是人们如何响应客户端读写请求等。)然而,在问题58582上遇到绊脚石后,开发人员指出了新的BluetoothManager.openGattServer()方法,该方法将您的回调作为参数并返回{{1对象。好吧,一个问题解决了。

下一个问题更成问题。 BluetoothGattServer文档声明可以使用此类创建和通告蓝牙LE服务和特性。创建服务等不是问题,但他们忽略了如何开始做广告。类本身或我可以找到的任何其他类都没有方法。

有谁知道怎么做?目前我所能看到的是使用客户端使用的相同方法,但这种方法涉及扫描(不是广告)。所有文档都进一步表明BluetoothGattServer确实只是用于扫描。

那么,一旦我的所有服务,特征和描述符到位,我该如何调用广告?

4 个答案:

答案 0 :(得分:17)

据我了解,Android实现只能作为中央设备,而不能作为外围设备。在蓝牙低功耗中,只有外围设备可以做广告。中央设备可以扫描来自外围设备的广告,并将连接请求作为对(某些类型)广告的回复发送,以创建与外围设备的连接。

在BLE中,概念 Central / Peripheral Server / Client 之间存在区别:

  • 中心/外围设备与网络架构有关,其中中心是星形中心,其中有一个或多个外围设备连接到它。它通常是手机,平板电脑或计算机。外围设备一次只能连接到一个中心。

  • 服务器/客户端(GATT服务器/客户端)是一种更高级别的概念,与保存在设备中并可能通过连接进行通信的数据相关。中央设备和外围设备都可以实现GATT服务器和GATT客户端,但不需要同时使用两者。

所以回答你的问题:你不能调用广告。您必须开始扫描外围设备才能与其中一个或多个设备建立连接。

希望这有帮助。

答案 1 :(得分:12)

您需要API级别21.

import android.bluetooth.le;
...
...
BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
BluetoothAdapter myBluetoothAdapter = bluetoothManager.getAdapter();
BluetoothLeAdvertiser myBluetoothLeAdvertiser =  myBluetoothAdapter.getBluetoothLeAdvertiser ();
myBluetoothLeAdvertiser.startAdvertising (AdvertiseSettings settings, AdvertiseData advertiseData, AdvertiseCallback callback);

有用的链接是:https://developer.android.com/about/versions/android-5.0.html

答案 2 :(得分:2)

似乎getProfileProxy没有回复GATTGATT_SERVER请求。 API建议广告支持,but there is no code implemented behind yet.(Android问题跟踪器)

在推出NFC时,最初发布了相同的中途实现API,Google迭代通过后续版本添加了更全面的功能。

答案 3 :(得分:1)

正如我所看到的,BLE广告能力(又称外围模式)将添加到Android,即将推出的Kitkat版本4.4.3。 它本应在下周发布,但更改日志已经意外泄露,请参阅第2554行的Google缓存或here外设模式(3/4):添加外设模式API < / strong>即可。

我想我们会很快知道的。