【发布时间】:2015-06-04 13:52:36
【问题描述】:
我有一个项目正在扫描在 BLE 上运行的信标。
我可以扫描信标并将它们列在一个很好的自定义ListView 中就好了。但是检索他们的名字似乎不起作用。
在我的OnLeScan 回调中,我使用device.getName(),它似乎总是返回null?
此外,当我尝试解析 ScanRecord byte[] 数组以获取与this 帖子一致的数据时 - 我仍然没有太多运气。有什么想法/提示吗?
我应该从BluetoothDevice 类中检索本地名称吗?我应该通过解析ScanRecord/ScanResult 类来检索它吗?
这是我的 onLeScan 的样子:
public void onLeScan(final BluetoothDevice device, int rssi, final byte[] scanRecord) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.v(device.getName(),device.getName());
mLeDeviceListAdapter.addDevice(device);
mLeDeviceListAdapter.notifyDataSetChanged();
}
}
});
}
编辑:
我尝试对链接帖子中的代码进行一些修改。添加案例 0x08: 如 cmets 中所建议的那样。但是,我的 ListView 默认仍将所有找到的设备列为“未知设备”,并且不会检索友好名称。
【问题讨论】:
-
在另一篇文章中的那个解析器上,我可以说它应该有一个与 0x09 相同的大小写 0x08 以涵盖短名称大小写。 0x09 是完整的名称。除此之外,您确定该设备实际上是在宣传名称吗?
-
您是否会说尝试从
onLeScan中检索来自BluetoothDevice的友好名称在这种方法中是徒劳的?我读过很多,BluetoothDevice类可能相当挑剔。 -
我通常会看到BluetoothDevice.getName() 为我工作,除非设备没有发送名称。如果您有多个相同类型的设备,它们几乎肯定具有相同的名称,因此通常不适合向用户显示列表。
-
我明白了。然而,情况是我正在通过修改设备制造商的 API/应用程序中的固件来积极修改友好名称。所以我可以保证名字是唯一的。
标签: android bytearray bluetooth-lowenergy android-bluetooth