Android BLE无法发现MSP432 SensorHub服务问题求助
排查MSP432 SensorHub服务找不到的问题
我来帮你梳理下排查思路,结合你给出的代码片段,先从几个最容易出问题的关键点入手:
1. 先检查UUID是否完整
你代码里的TEMP_SERVICE UUID明显被截断了:
private static final UUID TEMP_SERVICE = UUID.fromString("f000aa00-0451-4000-b00...");
TI官方MSP432 SensorHub示例的温度服务完整UUID是 f000aa00-0451-4000-b000-000000000000,UUID不完整会直接导致系统无法匹配到对应服务,这是最常见的坑。
2. 确认Gatt连接流程是否正确
从你声明的mBluetoothGatt来看,要确保你是按标准流程完成连接和服务发现的:
- 设备连接成功后,必须调用
mBluetoothGatt.discoverServices()主动触发服务发现 - 所有服务查找的逻辑必须放在
BluetoothGattCallback的onServicesDiscovered回调里,不能在连接成功后立即调用getService(),因为服务发现是异步操作
给你个标准的回调实现参考:
private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() { @Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { super.onConnectionStateChange(gatt, status, newState); if (newState == BluetoothProfile.STATE_CONNECTED) { // 连接成功后立刻启动服务发现 Log.d(TAG, "设备已连接,开始发现服务"); gatt.discoverServices(); } } @Override public void onServicesDiscovered(BluetoothGatt gatt, int status) { super.onServicesDiscovered(gatt, status); if (status == BluetoothGatt.GATT_SUCCESS) { // 在这里查找目标温度服务 BluetoothGattService tempService = gatt.getService(TEMP_SERVICE); if (tempService != null) { Log.d(TAG, "温度服务已找到!"); // 接下来可以获取温度特征值 BluetoothGattCharacteristic tempChar = tempService.getCharacteristic(UUID.fromString("f000aa01-0451-4000-b000-000000000000")); } else { Log.e(TAG, "未找到目标温度服务"); // 打印所有已发现的服务,排查UUID是否匹配 for (BluetoothGattService service : gatt.getServices()) { Log.d(TAG, "已发现服务UUID: " + service.getUuid().toString()); } } } else { Log.e(TAG, "服务发现失败,状态码: " + status); } } };
3. 硬件与固件层面排查
- 确认CC2650 BoosterPack烧录的是TI官方SensorHub示例固件(可以从
simplelink_msp432p4_sdk里找到对应项目) - 检查Sensor BoosterPack是否正确插在MSP432开发板上,引脚对齐无误
- 确保设备蓝牙处于可连接状态,Android设备已和它完成配对(有些设备需要配对后才能访问GATT服务)
4. Logcat排查技巧
如果还是找不到服务,建议在onServicesDiscovered里打印所有已发现的服务UUID,这样就能直观看到设备实际广播的服务是什么,对比你使用的UUID是否一致,避免用错UUID。
内容的提问来源于stack exchange,提问作者Gruwy
相关产品推荐
相关产品推荐

