2011-11-26 49 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