You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 12手机(Moto G52)固定显示旧BLE外设UUID问题求助

解决Android设备BLE服务UUID缓存问题

核心原因

你的Moto G52(Android 12)蓝牙系统缓存了Arduino外设旧的服务/特征UUID数据。由于BLE外设的MAC地址未变化,系统默认判定为同一设备,直接调用缓存数据,不会重新扫描获取新的服务信息。

实操解决方法

1. 修改Arduino外设的蓝牙MAC地址

BLE设备的MAC地址是系统识别设备的核心标识,修改MAC能让Android系统认为是新设备,彻底绕过缓存:

  • Arduino Nano RP2040 Connect可通过代码强制设置自定义MAC,示例片段:
#include <ArduinoBLE.h>

// 自定义MAC地址(格式需符合BLE规范,如00:1A:7D:DA:71:14)
byte customMac[] = {0x00, 0x1A, 0x7D, 0xDA, 0x71, 0x14};

void setup() {
  // 初始化BLE前设置自定义MAC
  BLE.setDeviceAddress(customMac);
  BLE.begin();
  // 后续服务、特征初始化代码...
}
  • 每次修改UUID后,同步修改MAC地址的最后一位,确保系统识别为新设备。

2. 强制清除Android蓝牙系统深层缓存

常规清除应用数据/缓存无效,需更彻底操作:

  • 关闭手机蓝牙,进入设置 > 应用 > 显示系统应用 > 蓝牙 > 存储 > 删除数据(Moto设备可直接搜索“蓝牙系统应用”定位)
  • 重启手机后再打开蓝牙重新连接设备。

3. 重置手机蓝牙模块

  • 开启开发者选项(未开启则连续点击设置 > 关于手机 > 版本号7次)
  • 找到“重置蓝牙”或“重置Wi-Fi、移动数据和蓝牙”选项,选择仅重置蓝牙(此操作会清除已配对的所有蓝牙设备,需重新配对)

4. Unity应用端临时适配(应急方案)

若暂时无法修改外设MAC,可在Unity代码中添加强制重新发现服务的逻辑:

  • 连接设备后,不要直接使用缓存服务,调用BluetoothLEHardwareInterface.DiscoverServices方法,强制扫描最新的服务和特征UUID。

验证方法

修改MAC或重置蓝牙后,用nRF Connect重新连接设备,确认服务UUID已更新为新值;再测试Unity应用,验证新UUID订阅特征是否正常。

内容的提问来源于stack exchange,提问作者Jack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:40:47