微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

蓝牙 Gatt 服务器 Android 设备 Null

如何解决蓝牙 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 举报,一经查实,本站将立刻删除。