是的,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被交換)。
來源
2012-05-29 14:34:36
Tom
THANK YOU SO MUCH – user1408996
這種方法解封我的藍牙,我就可以發送數據。此前BT設備不會迴應。在此代碼應用後,我刪除了合作關係,然後重新啓動了它。 我有一個藍牙打印機適配器(中文)和一臺Epson LX 300 + II點陣打印機。我列出發票。 非常感謝! – mihai71