[英]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.