【问题标题】:Android Bluetooth Connectivity with RN42 Module带有 RN42 模块的 Android 蓝牙连接
【发布时间】:2015-06-25 17:26:01
【问题描述】:

我正在尝试将我的应用连接到 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,它不为空。当调用bluetoothSocket.connect() 时,它会以某种方式变为空。

这是预期的行为吗?我能做些什么来修复它? RN42 模块工作正常,因为我在 Play 商店中使用 RN 蓝牙聊天应用对其进行了测试。

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

【问题讨论】:

  • 我也面临类似的问题。所以请你能提供我的详细信息。你的问题怎么了?这个问题解决了吗?请提供示例代码。

标签: android bluetooth embedded


【解决方案1】:

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

少了很多头痛! :)

【讨论】:

  • 抱歉来晚了;但是一切对你来说都是“开箱即用”的吗?我实际上是在尝试用蓝牙聊天做同样的事情,但它对我来说失败了。我可以配对但不能建立连接。
  • 嘿,是的,它对我来说是开箱即用的。您是否尝试过使用 Play 商店的 RN 蓝牙聊天来确保您的模块正常工作?
  • 我刚刚下载了那个应用程序,所以我回家后试试看。它应该可以工作,我已经将此 RN42 与“闭源”Android 应用程序一起使用,并且可以正常工作。所以我得继续闲逛。
  • 我也面临类似的问题。我从蓝牙设置配对设备,但现在我试图向设备发送命令,但我没有得到设备的响应。应用程序在读取流中挂起。所以请建议。
【解决方案2】:

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

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

【讨论】:

  • 谢谢,但它没有帮助,我正在使用设备返回的 UUID,以便排除 UUID 问题。还有其他想法吗?
  • @mfro 这对我有用。我终于将 RN42 设备连接到我的 Android 蓝牙聊天。我必须将“BluetoothChatService.java”中的 UUID 更改为 00001101-0000-1000-8000-00805F9B34FB ,就像您链接的文档中所说的那样。我还必须将 RN42 上的远程蓝牙地址设置为 android 并通过 RN42 启动连接。谢谢!你是救生员!
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    相关资源
    最近更新 更多