与RN42模块的Android蓝牙连接

时间:2015-04-18 21:51:43

标签: android bluetooth embedded

我正在尝试将我的应用程序连接到RN42模块。

            // Create a socket based on the application ID with a paired device
            // Fetch the published UUIDs from the mbed and use the first one
            bluetoothSocket = connectedDevice.createRfcommSocketToServiceRecord(connectedDevice.getUuids()[0].getUuid());

            // Connect to the device
            if (!bluetoothSocket.isConnected())
                bluetoothSocket.connect();

            // Create the input and output streams for sending/receiving messages
            socketInput = bluetoothSocket.getInputStream();
            socketOutput = bluetoothSocket.getOutputStream();

我在Android Manifest中有这些

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>

当我拨打bluetoothSocket.connect()时,我收到此错误。

Attempt to invoke virtual method 'void android.bluetooth.BluetoothSocket.connect()' on a null object reference

调用此行后

bluetoothSocket = connectedDevice.createRfcommSocketToServiceRecord(connectedDevice.getUuids()[0].getUuid());

我使用Android Studio检查过变量bluetoothSocket并且它不是null。在调用bluetoothSocket.connect()时,它会以某种方式变为空。

这是预期的行为吗?我该怎么办才能修复它? RN42模块工作正常,因为我已经在Play商店使用RN蓝牙聊天应用进行了测试。

如果有帮助,我会使用Nexus 7上的Android 5.1。

3 个答案:

答案 0 :(得分:2)

我设法通过删除我的蓝牙连接代码来解决问题,而是基于Android Bluetooth Chat示例。我不知道确切的问题是什么,但蓝牙聊天示例设法解决它。没有什么明显的突出,所以我最好的猜测是,它是微妙的东西。如果您遇到类似的问题,并且RN42和Android之间的连接很繁琐,请创建示例蓝牙聊天应用程序并重用该蓝牙连接代码。

少许头痛! :)

答案 1 :(得分:1)

Seethis reference guide for the module(第21页)。

这可能适用于您的情况,也可能不适用,但可能值得尝试。在连接到Android设备时,它们会为模块提供特殊建议(分别为默认UUID和自定义UUID)。

答案 2 :(得分:0)

请改用createInsecureRfcommSocketToServiceRecord。不安全的套接字允许RFCOMM与未经认证的配对设备通信。像RN42或KC2114这样的嵌入式设备很难执行经过身份验证的配对,因为需要用户交互(数字比较,是 - 否响应)。 “Just Works”自动配对不会产生经过验证的配对。 KC2114支持自动身份验证配对(带小黑客)和Just Works非身份验证配对。