是的, fetchUuidsWithSdp() 是一个好主意,因为与 getUuids() 不同,它强制设备尝试连接到目标设备并更新其相关信息。
对 fetchUuidsWithSdp 的官方支持刚刚在 4.0.3 中添加,但在此之前使用反射就可以使用。
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." );
}
}
}
}
然后通常会注册 android.bluetooth.device.action.UUID,但您可能想要注册名称更改操作。
请注意,如果您决定注册 UUID 操作,则在 API 15 之前它被拼写错误为“android.bleutooth.device.action.UUID”(蓝牙中的 e 和 u 被交换)。