我想在Android中检索远程蓝牙设备的自定义名称.
我说的是在设置/蓝牙和配对设备下的手机设置中找到的名称.
例如.我有一个名为“DoorControl”的远程蓝牙设备.在设置 – >蓝牙 – >配对设备下,我已将设备重命名为“CTRL”.现在我想访问已定义的名称,以便我可以为用户显示它.
我想在蓝牙设备列表中显示该名称.
knownDevicesAdapter.clear();
knownDevicesArray = mBluetoothAdapter.getBondedDevices();
if (knownDevicesArray.size() > 0) {
for (BluetoothDevice device : knownDevicesArray) {
if (device.getName().contains("Door")) {
knownDevicesAdapter.add(device.getName()
+ /*HERE I WANT THE CUSTOM NAME TO SHOW*/ "\n"
+ device.getAddress());
}
}
}
device.getName()仅返回设备的完整原始名称,在本例中为“DoorControl”.
这是必要的,因为可以有4个名为DoorControl的设备.告诉他们之间区别的唯一方法是通过他们的地址.但是对于用户友好的方法,让他们在蓝牙设置中重命名设备并将该名称显示为设备的“昵称”要容易得多.
有没有办法访问自定义名称,所以我不必写完整的“rename->保存某个地址的名称 – >在我自己的应用程序中加载名称”-cycle?
编辑:
在搜索了一段时间之后,我决定在我自己的应用程序中编写重命名功能,因为我无法找到获取其他名称的方法.
如果有人正在读这个并且知道我原来问题的答案,我会很高兴知道它.
解决方法:
我发现的问题是getName()函数只返回默认设备名称,而不是用户可以设置的别名.在我的情况下,我有多个相同的设备配对,其默认名称是“摩托罗拉T605”.我无法区分它们所以我使用Android设置重命名它们.仍然,getName()返回“摩托罗拉T605”.我需要获得别名.该功能存在但未公开.你可以在这个Java类中看到它:https://android.googlesource.com/platform/frameworks/base/+/56a2301/core/java/android/bluetooth/BluetoothDevice.java这对我有用.
首先获得配对设备的数组:
Set<BluetoothDevice> pairedDevices = mBTA.getBondedDevices();
然后遍历数组:
for (BluetoothDevice device : pairedDevices)
然后看看你是否能找到一个别名:
String name = null;
try {
Method m = device.getClass().getMethod("getAlias");
Object res = m.invoke(device);
if(res != null)
name = res.toString();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
if(name == null)
name = device.getName();
如果您无法获得别名,请获取正常名称.我可以更好地预防和处理异常,但似乎有效.