2011-02-03 97 views
6

我正在寫一個android應用程序來與完全不受我控制的硬件設備通話。Android RFCOMM固定通道插座

我的應用程序使用listenUsingRfcommWithServiceRecord和UUID 00001101-0000-1000-8000-00805F9B34FB創建偵聽套接字。然後它調用該套接字上的accept()以等待遠程設備連接,但它永遠不會。

我曾與硬件設備製造商談過,他們說他們的設備將「簡單地連接到通道1」在遠程設備上。即,它不進行SDP發現以找出正確的信道號。他們拒絕改變這一點(儘管它當然是錯誤的)

我的問題是有沒有辦法強制android使用固定的RFCOMM頻道號?也許使用反射,就像連接到客戶端時直接調用createRfcommSocket的技巧。

回答

1

這些API存在,但不受支持。如果您仍然感興趣,請查看Android 1.5 backport of android.bluetooth的源代碼。

但是,請注意,作爲不受支持的API,它們可以在將來的任何版本中刪除。

+0

感謝您的回覆。 – didster 2011-02-09 09:34:43

1

一個非常簡單的方法是消耗所有的渠道,然後釋放你想要的!我和你有同樣的問題,而且這個黑客在現場工作了大約一年,沒有投訴。這有些漏洞,所以成功取決於你的用例。

最多有30個通道,因此您將使用您定義的UUID打開30個連接(或更少)。現在,使用spdtool找到所需通道的套接字連接的UUID。關閉該連接。

現在,您的情況下,頻道1將是唯一可用的頻道。以您想要的方式連接到它。連接建立後,關閉所有其他連接。

我知道這是hackey,但它適用於我的用例!