2012-06-20 157 views
4

我創建從我的HTC One X到SENA藍牙不安全RFCOMM連接使用此代碼ESD110系列模塊:Android的藍牙連接RFCOMM太慢

BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(addr); 
BluetoothSocket socket = null; 

try{ 
socket = device.createInsecureRfcommSocketToServiceRecord(UUID.fromString(SERVICE_UUID)); 

mBluetoothAdapter.cancelDiscovery(); 

socket.connect(); 
sendMessage(socket,"working!"); 
socket.close(); 

這裏的關鍵是連接到具有自動配對模塊, ,它都可以工作,但建立連接需要大約15秒。

調試仍然是:

socket.connect(); 

15秒和之後僅使連接和傳送字符串到模塊(需要1秒,這一點)。

在連接到MAC地址之前,手機是否可能正在處理其他一些數據(服務發現和更多),以及如何讓它連接更快? 或者它可能是宏達硬件問題?

回答

1

編輯如果一個緩慢的服務發現是你的問題,你可以嘗試避免通過直接使用反射來的createRfcommSocket方法跳過整個服務發現 - 我做的事,在我BT-SPP相關的項目等原因 - 它看起來像這樣:

BluetoothAdapter bta = BluetoothAdapter.getDefaultAdapter(); 
BluetoothDevice bd = bta.getRemoteDevice(mac); 
Method m = bd.getClass().getMethod("createRfcommSocket",new Class[] { int.class }); 
bt_connection = (BluetoothSocket) m.invoke(bd, Integer.valueOf(1)); 

預評論:你必須掃描所有的時間?如果您可以選擇記住mac,則可以更快地連接。漫長的等待時間imho來自發現 - 你只能連接,如果這是真的完成(不是直接完成後mBluetoothAdapter.cancelDiscovery();) - 這可能需要一些時間..

+0

嗨ligi,我用相同的'設備'與我的手機的mac地址做了兩次連接 - 沒有掃描,第一次連接花了15s,第二次花了15s ..我想手機是'掃描'的藍牙模塊的可用服務,它花了太長時間,但我已經給了手機服務uuid​​我需要... – itai

+0

嗨,感謝您的幫助,我編輯的代碼,但我有一些錯誤使用reflaction:'BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(「00:01:95:13:5C:4F」);方法m = device.getClass()。getMethod(「createInsecureRfcommSocket」,new Class [] {int.class}); 的BluetoothSocket插座=(的BluetoothSocket)m.invoke(設備,Integer.valueOf(1));',但我得到:\t IllegalAccessException \t - 未處理的異常型 \t的InvocationTargetException – itai

+0

createInsecureRfcommSocket/createRfcommSocket/createInsecureRfcommSocketToServiceRecord/createeRfcommSocketToServiceRecord - 所有反光標識該函數返回那個錯誤..... – itai

0

它是第二次更快?第一次找到手機(在您的設備有目標設備的時間之前)需要一段時間。

但是,即使它必須找到目標,也不應該花費15秒。

也許你遇到這個錯誤: http://code.google.com/p/android/issues/detail?id=29039

請注意,有在創建一個連接的作品之一的情況,但需要更長的時間,然後正常。