所以我有一个简单的外围应用程序,我在我的三星S8手机上运行的Android Studio中编码。我可以设置我的所有BLE广告和特性,但是当我添加我的服务时。当从另一个中央设备(即另一个具有应用程序的移动电话发现蓝牙广告)连接时,我没有看到预期的结果。
Android Studio的LogCat输出:
根据日志,我只能看到2个默认服务,即通用属性(1800)和通用访问(1801),它们是任何Gatt服务器的默认服务。我觉得我错过了" onServiceAdded()"应该判断该服务是否确实被添加和发现的回调。
我的代码没有错误,addService()调用成功。我的问题是为什么我无法从onServiceAdded()获得回复?而像onConnectionStateChange()这样的其他覆盖函数似乎工作正常。这似乎是非常基本的,我看了很多例子,但似乎无法让最后一点工作。任何有解决方案或一些好的参考资料的人都会非常感激。
答案 0 :(得分:0)
我遇到了同样的问题,并且当GATT服务器重新启动时,先前连接了客户端(中心)时,似乎没有调用回调。
如果断开所有客户端的连接并从干净状态重新启动服务器(外围设备),您将看到回调正常工作(就我而言,即使添加了2个服务)。
我的服务器也是Samsung Galaxy S7(Android 8.0)。客户端是Android 7设备。
(除了此回调问题:) 发生了一些缓存或奇怪的事情,如果您以前有连接,则无法在多种服务(一种预定义和一种自定义)下很好地工作。在我的情况下,当客户端已经连接并且如果我在启动时向服务器添加多个服务时,gattServer.getService(uuid)返回null。可以添加一项服务。
答案 1 :(得分:0)
我遇到了同样的问题(诺基亚6.1),尽管我添加了2个服务并且随机获取了onServiceAdded,但是只调用了一次
onCharacteristicReadRequest() no char for handle nnn
当尝试从另一台设备连接时。
中找到了相关的要点BluetoothGattServerCallback.onServiceAdded(int, BluetoothGattService)回调将指示此服务是否具有 已成功添加。在此之前不要添加其他服务 回调。
我发现可靠的解决方案是添加一个服务,等待调用onServiceAdded,然后添加第二个服务,再次等待onServiceAdded,然后调用startAdvertising。