如何在Android中获取远程设备自定义蓝牙名称?

我想在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();

如果您无法获得别名,请获取正常名称.我可以更好地预防和处理异常,但似乎有效.

上一篇:从不调用android – onServicesDiscovered(BluetoothGatt gatt,int status)


下一篇:python – 在ZeroMQ / Tornado ioloop中使用BluetoothSocket,或者在Twisted中使用?