BluetoothDevice 在 getName() 上总是 returns null

BluetoothDevice always returns null on getName()

我在 Android 4.4、5 和 6 中一直遇到这个问题。

我正在执行 BLE 蓝牙设备扫描,之后我可以访问它们的地址 (getAddress()) 和其他数据。但是,如果我每次都调用 device.getName() 它 returns null。

这个文档没有帮助,它只说 returns null if "there was a problem" : https://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#getName()

其他访问失败的帖子:

https://code.google.com/p/android/issues/detail?id=34411

android BluetoothDevice.getName() return null

ble device bluetoothdevice.getname() returns null

PS:我在 Android API 级别 21+ 中使用了未弃用的方法,因此这与问题无关。

知道这里可能出了什么问题吗?

可能是您的 BLE 设备没有广播名称。广播负载限制为 31 个字节,一些制造商省略名称以节省空间。

我不再使用 getName() 了,因为当它 returns 一个真实的名字(如果是的话,这个缓存的名字有多大?)并且它是 null 时,它似乎是未定义的。只需解析广告数据中的 scanRecord 并从那里获取名称,或者如果已连接,则读取 GATT 数据库中的名称特征。