Android蓝牙连接安全不安全

时间:2011-11-26 23:40:01

标签: android bluetooth connection cyanogenmod

我一直在使用适用于Android 2.2的蓝牙API(API级别8,HTC Desire),并使用以下应用程序连接到嵌入式蓝牙设备:

device.createRfcommSocketToServiceRecord(DEV_UUID);

这产生了一个预期的配对请求,但是为了简化连接过程,我希望避免用户交互,当配对转移到API级别10(HTC Desire with CyanogenMod 7)时,我可以使用:

 device.createInsecureRfcommSocketToServiceRecord(DEV_UUID);

测试时这也可以按预期工作(连接时不会提示用户配对),但是当我尝试在API级别10下创建安全的RfcommSocket时,如2.2所示,我得到连接拒绝异常......

 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");
        }

1 个答案:

答案 0 :(得分:4)

在我的应用中寻找类似问题的解决方案时,我在code.google.com

中找到了此博客

它将帮助所有仍在寻找此问题解决方案的人

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);

多数民众赞成!