2012-06-03 50 views
1

我想開發一個應用程序,它使用Linux藍牙API Bluez,意味着允許Android設備發送和接收數據。運行在PC上用於監聽Android設備的Bluez應用程序

對於PC側我已經搜索這代碼: http://people.csail.mit.edu/albert/bluez-intro/x502.html 由於Android使用RFCOMM協議,或我想的是,由於是不可能的手動設定的協議。

由於Android是唯一可以使用的Java API(配合bluez API鎖定)和SDP在不工作得非常好,我有權利使用這個調用:

InsecureBluetooth.createRfcommSocket(BlueDevice , Channel , false); 

當我設置的通道,例如,以0xC(12)即命令返回的指令之一:

sdptool browse local | grep Channel 

android應用程序可以正確連接到PC。

問題是,我無法弄清楚什麼是允許兩個應用程序進行通信的參數。到個人電腦方面,我只有一個值爲1的端口號。在Android端,我有一個分配給SDP可用服務的通道。但SDP不在Android中工作,所以我該怎麼做?

任何幫助表示讚賞。謝謝

回答

0

我知道這不會回答你的問題,我認爲bluecove(http://bluecove.org/)將是更好的選擇。它支持大多數操作系統,併爲Java提供體面的庫。

我不認爲bluez適用於Windows,您需要一個WIDCOMM或BlueSoleil堆棧,並且bluecove將爲您使用合適的堆棧。

+0

謝謝!我考慮它。但我更喜歡使用C/C++本機庫,因爲它更輕量級(但也更難使用),應用程序GUI基於Qt Framework。 – Bemipefe

1

我已經用這種方法解決了:

對於使用SDP記錄的PC端。我們必須將服務記錄到必須是免費的知名頻道,我的意思是不被其他服務使用。赤它做的命令:

sdptool record local 

的代碼來執行,其在http://people.csail.mit.edu/albert/bluez-intro/x604.html

實施例4-9。描述服務

//設置一般服務ID

// set the service class ID 
sdp_list_t service_class = {NULL, &svc_uuid}; 
sdp_set_service_classes(record, &service_class); 

,我們必須改變信道到一個未使用的其它服務必須添加這兩個線路。例如,通道1:

uint8_t rfcomm_channel = 1; 

現在,我們有一些聽PC端,我們必須與Android設備直接連接到由衆所周知反射法通道之一,因爲不幸的是,SDP現在在所有的工作在android中。

Method bluetoothConnect; 

bluetoothConnect = BlueDevice.getClass().getMethod("createRfcommSocket", new Class[]{int.class}); 
CommunicationChannel = (BluetoothSocket) bluetoothConnect.invoke(BlueDevice, 1); 

CommunicationChannel.connect(); 

當然BlueDevice是由startDiscovery()方法和 「1」 discored的裝置放置通道1。

相關問題