Android 4.3 BTLE作为服务器:如何启动广告?

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

下一个问题是更多的问题。 BluetoothGattServer文档指出,可以使用此类来创build和通告Bluetooth LE服务和特性。 创build服务等并不是问题,但他们忽视了如何开始做广告。 class级本身或其他任何我能find的class级都没有办法。

有谁知道如何做到这一点? 目前我所能看到的只是使用与客户使用的方法相同的方法,但是这种方法涉及扫描(这不是广告)。 所有的文件进一步表明, BluetoothAdapter.startLeScan() IS确实是扫描。

那么一旦我所有的服务,特征和描述符都到位,我怎么才能调用广告?

Solutions Collecting From Web of "Android 4.3 BTLE作为服务器:如何启动广告?"

据我所知,Android的实施只能作为一个中央设备,而不是外围设备。 在低功耗蓝牙中,只有外设可以做广告。 中央设备可以扫描来自外设的广告,并发送连接请求作为对某些广告的回复,以创build与外设的连接。

在BLE中, 中心/外设服务器/客户端之间有区别:

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

  • 服务器/客户端(GATT服务器/客户端)是一个更高层次的概念,与设备中保存的数据相关,并可能通过连接进行通信。 中央和外围设备都可以实现一个GATT服务器和一个GATT客户端,但不一定要兼顾。

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

希望这可以帮助。

您将需要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

看来getProfileProxy不响应GATTGATT_SERVER请求。 APIbuild议广告支持, 但目前还没有实现代码。 (Android问题跟踪器)

相同的中途实现的API最初是在NFC引入的时候发布的,而Google反复增加了全面的function和后续版本。

正如我所看到的,BLE的广告能力(aka外设模式)将被添加到即将推出的Kitkat 4.4.3版本的Android。 它应该会在下周发布,但更新日志已经被意外泄漏,请参阅Googlecaching或在第2554行: 外设模式(3/4):添加外设模式API

我想我们会更快地知道。