2011-11-26 93 views
4

我已經與藍牙API玩弄爲Android 2.2(API級別8,HTC慾望)並具有使用連接到嵌入式藍牙裝置的應用程式:Android的藍牙連接安全不安全

device.createRfcommSocketToServiceRecord(DEV_UUID); 

這產生的配對請求符合市場預期,但簡化連接過程中,我想避免用戶交互時配對感動到API 10級(HTC Desire採用的CyanogenMod 7),所以我可以使用:

device.createInsecureRfcommSocketToServiceRecord(DEV_UUID); 

當測試這也適用如預期的那樣(連接沒有親mpting用戶對),但是當我嘗試與2.2我得到一個連接被拒絕異常之前創造條件API級別10的安全RfcommSocket ...

java.io.IOException: Connection refused 
    at android.bluetooth.BluetoothSocket.connectNative(Native Method) 
    at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:204) 

據我所知這應該仍然工作以同樣的方式,提示用戶配對?

編輯:

使用下面的代碼就又試了試,結果是相同的(不安全的工作,但不是安全的),我會盡量讓我的手股票2.3設備上測試。

 try { 
      Method m = dev.getClass().getMethod("createInsecureRfcommSocketToServiceRecord", new Class[] { UUID.class }); 
      BluetoothSocket bs = (BluetoothSocket)m.invoke(dev, devUUID); 
      Log.d("TEST", "Method Invoked"); 
      bs.connect(); 
      Log.d("TEST", "Connected to socket"); 
      bs.close(); 
      Log.d("TEST", "Closed Socket"); 
     } 
+0

這可能是無關的,但你見過? http://stackoverflow.com/questions/3353080/android-2-1-htc-desire-is-there-a-bluetooth-problem-corruptedstreamexceptio – Jack

+0

謝謝傑克,這些問題似乎是由2.1引起的,所以希望我不應該'不會受到影響,我會嘗試使用反射的連接,看看是否有幫助。 – DarkRyuu

回答

4

在尋找類似的問題在我的應用程序的解決方案,我發現從code.google.com這個博客

這將幫助所有那些誰仍然在尋找這個問題的解決方案上SO

http://mobisocial.stanford.edu/news/2011/03/bluetooth-reflection-and-legacy-nfc/(鏈接不再工作)

該解決方案現在已經變得非常簡單。只需在您的項目中包含InsecureBluetooth.java,並在BluetoothChatService.java中更改2行。

tmp = InsecureBluetooth.listenUsingRfcommWithServiceRecord(mAdapter, NAME, MY_UUID, true); 

tmp = InsecureBluetooth.createRfcommSocketToServiceRecord(device, MY_UUID, true); 

完蛋了!

+0

這是一個很好的解決方案,但是你能解釋如何使用UUID,以及mAdapter和設備之間的區別嗎?我閱讀了Android開發者的藍牙文章,但我仍然不完全清楚。 – Argus9

+0

我試過使用tmp = InsecureBluetooth.listenUsingRfcommWithServiceRecord(mAdapter,NAME,MY_UUID,true);但它拋出了一個異常「mHandler」....任何人都知道如何解決這個問題 – Azerue

+0

您好@Sourab夏爾馬,似乎您提供的鏈接現在不可用,有沒有其他網站,我們可以得到的代碼?或者可以給我郵寄一份嗎?我的郵件是yttyhf2006#gmail.com。謝謝。 – YuDenzel