如何解决蓝牙 Gatt 服务器 Android 设备 Null
大家好,我想问这个问题,因为我在 BLE 上遇到了 Android 客户端/服务器的问题。
问题:客户端连接到服务器,服务器接受来自客户端的连接。客户在那个阶段是可见的。当服务器收到来自客户端的 onCharacteristicRead 请求后,设备名称不再可用并且完全消失,只有我认为存在的地址,但该设备的地址不再相同,但存在连接。
附加信息:我发现 onConnectionUpdate 和 ServerUpdateConnection 的客户端/服务器 Gatt 回调存在问题,它们公开可用但不可覆盖。这里的任何想法我也认为这是系统本身的错误。
这是来自服务器端的回调,它是一个标准回调,没什么特别的。两个设备都用他们的名字做广告,并且在服务器端的空值之后的第一个连接状态被检测到。
mGattServer = bluetoothManager.openGattServer(mAppContext.get(),new BluetoothGattServerCallback() {
@Override
public void onConnectionStateChange(BluetoothDevice device,int status,int newState) {
super.onConnectionStateChange(device,status,newState);
if (newState == BluetoothProfile.STATE_CONNECTED) {
if (device.getName() != null) {
Log.e(TAG,"Connected SERVER for device: " + device.getName());
}
}
else if (newState == BluetoothProfile.STATE_CONNECTING) {
Log.e(TAG,"SERVER Attempting to connect...");
}
else if (newState == BluetoothProfile.STATE_disCONNECTED) {
Log.e(TAG,"disconnected SERVER WITHOUT CONNECTION.");
}
}
@Override
public void onServiceAdded(int status,BluetoothGattService service) {
super.onServiceAdded(status,service);
}
@Override
public void onCharacteristicReadRequest(BluetoothDevice device,int requestId,int offset,BluetoothGattCharacteristic characteristic) {
super.onCharacteristicReadRequest(device,requestId,offset,characteristic);
Log.d(TAG,"BluetoothGattServerCallback.onCharacteristicReadRequest with " + device.getName());
}
@Override
public void onCharacteristicWriteRequest(BluetoothDevice device,BluetoothGattCharacteristic characteristic,boolean preparedWrite,boolean responseNeeded,byte[] value) {
super.onCharacteristicWriteRequest(device,characteristic,preparedWrite,responseNeeded,value);
Log.d(TAG,"BluetoothGattServerCallback.onCharacteristicWriteRequest with " + value.length + " bytes" + " : " + characteristic.getUuid());
}
@Override
public void onDescriptorReadRequest(BluetoothDevice device,BluetoothGattDescriptor descriptor) {
super.onDescriptorReadRequest(device,descriptor);
}
@Override
public void onDescriptorWriteRequest(BluetoothDevice device,BluetoothGattDescriptor descriptor,byte[] value) {
super.onDescriptorWriteRequest(device,descriptor,value);
}
@Override
public void onExecuteWrite(BluetoothDevice device,boolean execute) {
super.onExecuteWrite(device,execute);
}
@Override
public void onNotificationSent(BluetoothDevice device,int status) {
super.onNotificationSent(device,status);
}
@Override
public void onMtuChanged(BluetoothDevice device,int mtu) {
super.onMtuChanged(device,mtu);
Log.d(TAG,"SERVICE GATT SERVER MTU SIZE " + mtu);
}
@Override
public void onPhyUpdate(BluetoothDevice device,int txPhy,int rxPhy,int status) {
super.onPhyUpdate(device,txPhy,rxPhy,status);
}
@Override
public void onPhyRead(BluetoothDevice device,int status) {
super.onPhyRead(device,status);
}
});
更新:
客户端 - 连接 - 服务器后该服务器的设备名称为空
服务器/客户端 - 连接客户端/服务器有设备名称和空
Client/Server 有 2 个连接,name 和 null
如果你只做客户端/服务器,你会看到每个设备扮演每个角色 问题。服务器将获得空设备名称。
如果两者都有,它将获得名称,但会在每一侧将读/写连接加倍,每个连接都有设备名称,但发送/接收的连接将是可空的。
我使用的设备:S21+ 和 Nexus 5X
这个问题有什么解决方案吗?
如果需要,我可以提供错误报告。
谢谢!感谢任何反馈和帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。