我听说外围设备停止广告是一种很好的做法,因为它不再需要新的连接,以节省电池费用。
所以,在onConnectionStateChange
内部的外围设备上,我这样称呼advertiser.stopAdvertising(advertiseCallback)
:
private final BluetoothGattServerCallback bluetoothServerCallback = new BluetoothGattServerCallback() {
@Override
public void onConnectionStateChange(BluetoothDevice device, int status, int newState) {
Log.d(TAG, String.format("onConnectionStateChange status=%d, newState=%d", status, newState));
super.onConnectionStateChange(device, status, newState);
// advertiser should be turned off when connection state changes
// but the problem is - this breaks the client side service discovery
// so, I'm not sure what would be the right moment to stop advertising
advertiser.stopAdvertising(advertiseCallback);
}
在我与onConnectionStateChange
连接并接收BluetoothProfile.STATE_CONNECTED
后,在客户端,我致电
connectedPeripheralGatt.discoverServices()
并等待onServicesDiscovered
回调。
问题在于,如果外围设备已停止投放广告,onServicesDiscovered
会收到状态代码257(这是通用模糊GATT_FAILURE的常量),并且未发现任何服务。
如果我发表评论stopAdvertising
,则客户端onServicesDiscovered
按预期工作,但外围设备继续广告,但我不再需要它。
它应该如何运作?如何在不再需要时停止广告?
两个设备都没有配对/绑定。我不确定配对设备会发生什么 - 即使由于真实的MAC地址而停止广告,onServicesDiscovered
也可能会有效,但我想让它在没有配对的情况下工作。