如何通过程序清除蓝牙缓存的设备名称?
现象:
一个已经配对过的蓝牙设备,修改名称之后,手机上显示的依旧是以前的名称,并没有更新成最新的名字。
如果取消配对,再重新配对,名称又能更新。
所以,很明显android缓存了设备名称。
问题:
如何强制让android显示蓝牙设备的最新名称
方法:
使用fetchUuidsWithSdp(),调用这个函数之后,会强制重连设备并更新设备信息。
该函数仅在android 4.0.3之后才有效,而且API并非公开的,需要通过反射的方式调用。
参考代码如下:
public static void startFetch( 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." ); } } } }