繁体   English   中英

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

[英]How to get remote devices custom Bluetooth name in 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的设备。 告诉他们之间区别的唯一方法是通过他们的地址。 但是对于用户友好的方法,让他们在蓝牙设置中重命名设备并将该名称显示为设备的“昵称”要容易得多。

有没有办法访问自定义名称,所以我不必编写完整的“重命名 - >保存某个地址的名称 - >在我自己的应用程序中加载名称”-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();

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

在您的应用中,您可以重命名蓝牙设备,如下所示:

public boolean renamePairedDevice(BluetoothDevice bluetoothDevice, String name) {
    try {
        Method m = bluetoothDevice.getClass().getMethod("setAlias", String.class);
        m.invoke(bluetoothDevice, name);
        return true;
    } catch (Exception e) {
        Log.d(TAG, "error renaming device:" + e.getMessage());
        return false;
    }
}

然后, bluetoothDevice.getName()将返回新名称。

这与在设备设置中重命名蓝牙设备具有相同的效果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM