我正在写一个Android应用程序从一个蓝牙设备接收信息。 我们的客户建议,蓝牙设备(他们生产)将根据一定的条件下改变其名称 - 最简单的例子它的名字有时会“XXX-ON”,有时“XXX-OFF”。 我的应用程序只应该寻求这个蓝牙发射器(我用BluetoothAdapter.startDiscovery()),并做取决于它找到的名称不同的事情。 我不与蓝牙设备配对(虽然我认为这是可能的,应用程序应该最终与多台Android设备和多个BT发射机工作,所以我不知道这将是一个不错的主意)。
我的代码工作正常,检测BT设备,并找到他们的名字。 另外,如果设备熄灭,我可以检测下一次我求,这是不存在的。 但似乎如果它是存在的,它改变了名字,我拿起旧名 - 大概是缓存的地方。 即使蓝牙设备熄灭,我们注意到,下一次我发现,我还是看到了旧名。
我发现这个问题在谷歌代码: 在这里 ,但我不清楚,甚至如何使用给出的解决方法(“尝试连接”)。 有没有人这样做,任何运气? 你能共享代码?
有没有一种简单的方法,只是删除缓存的名字并重新搜索,所以我总能找到最新的名字呢? 即使是一个非简单的方法将是很好(我写一个根深蒂固设备)。
谢谢
我建议 'fetchUuidsWithSdp()'。 它的意义在于,不像类似getUuids()方法,fetchUuidsWithSdp导致设备更新有关远程设备缓存信息。 我相信这包括远程名称以及社民党。
注意,这两个我提到是隐藏之前4.0.3的方法,让你的代码看起来升IKE在此:
public static void startServiceDiscovery( BluetoothDevice device ) {
// Need to use reflection prior to API 15
Class cl = null;
try {
cl = Class.forName("android.bluetooth.BluetoothDevice");
} catch( ClassNotFoundException exc ) {
Log.e(CTAG, "android.bluetooth.BluetoothDevice not found." );
}
if (null != cl) {
Class[] param = {};
Method method = null;
try {
method = cl.getMethod("fetchUuidsWithSdp", param);
} catch( NoSuchMethodException exc ) {
Log.e(CTAG, "fetchUuidsWithSdp not found." );
}
if (null != method) {
Object[] args = {};
try {
method.invoke(device, args);
} catch (Exception exc) {
Log.e(CTAG, "Failed to invoke fetchUuidsWithSdp method." );
}
}
}
}
然后,您将需要监听BluetoothDevice.ACTION_NAME_CHANGED意图,并从中提取BluetoothDevice.EXTRA_NAME。
让我知道是否有帮助。