蓝牙连接错误:“jnius.jnius.JavaException:发生 JVM 异常:读取失败,套接字可能关闭或超时,读取 ret:-1”

Posted

技术标签:

【中文标题】蓝牙连接错误:“jnius.jnius.JavaException:发生 JVM 异常:读取失败,套接字可能关闭或超时,读取 ret:-1”【英文标题】:Bluetooth connection error: "jnius.jnius.JavaException: JVM exception occurred: read failed, socket might closed or timeout, read ret: -1" 【发布时间】:2021-11-03 02:56:54 【问题描述】:

我正在使用 python 开发一个 android 应用程序。我想使用 pyjnius 库通过蓝牙将此应用程序与我计算机上的服务器连接。我正在使用 rfcomm-server.py 脚本作为来自此链接的服务器:https://github.com/pybluez/pybluez/blob/master/examples/simple/rfcomm-server.py

客户端脚本:

from jnius import autoclass


server_mac_address = '94:08:53:52:B5:98'
uuid = "00001101-0000-1000-8000-00805F9B34FB"

BluetoothAdapter = autoclass('android.bluetooth.BluetoothAdapter')
BluetoothDevice = autoclass('android.bluetooth.BluetoothDevice')
BluetoothSocket = autoclass('android.bluetooth.BluetoothSocket')
UUID = autoclass('java.util.UUID')

def get_socket_stream(name):
    adapter = BluetoothAdapter.getDefaultAdapter()
    device = adapter.getRemoteDevice(server_mac_address)
    socket = device.createRfcommSocketToServiceRecord(UUID.fromString(uuid))
    adapter.cancelDiscovery()
    socket.connect()

    recv_stream = socket.getInputStream()
    send_stream = socket.getOutputStream()

    return recv_stream, send_stream

if __name__ == '__main__':
    recv_stream, send_stream = get_socket_stream('linvor')
    send_stream.write('hello\n')
    send_stream.flush()

当我运行此代码时,我收到以下错误:“jnius.jnius.JavaException:发生 JVM 异常:读取失败,套接字可能关闭或超时,在套接字中读取 ret:-1”。连接()线。我通过蓝牙菜单将手机连接到电脑,所以我确保我的设备已与手机配对。 有人可以帮我吗?

我针对类似问题建立了不同的建议解决方案。比如这个:Bluetooth Connection failed "java.io.IOException: read failed, socket might closed or timeout, read ret: -1"。

我也尝试在python中实现以下java代码,但没有成功:

socket = (BluetoothSocket) device.getClass().getMethod("createRfcommSocket", new Class[] int.class).invoke(device,1);
socket.connect();

我在堆栈溢出上找到的所有解决方案都是用 java 实现的。所以这就是问题所在,因为我不懂 java :) 所以我需要在 python 中实现。

我还尝试使用不同的函数而不是 createRfcommSocketToServiceRecord() 来创建套接字。比如 createInsecureRfcommSocketToServiceRecord() 和 createRfcommSocket(),但是不管用。

【问题讨论】:

【参考方案1】:

也许你不应该使用 pyjnius?如果你想在 Android 上使用某些东西,你可以使用适用于 Android 的 python 项目。 P4A 已经包含 pyjnius 和 Kivy,并具有包含其他 Python 模块和从您的应用程序创建 APK 的脚本。 python-for-android还提供了VirtualBox虚拟机,简化了Windows用户的工作流程。

【讨论】:

请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。

以上是关于蓝牙连接错误:“jnius.jnius.JavaException:发生 JVM 异常:读取失败,套接字可能关闭或超时,读取 ret:-1”的主要内容,如果未能解决你的问题,请参考以下文章

android 怎么判断连接了那个蓝牙耳机

蓝牙连接错误:“jnius.jnius.JavaException:发生 JVM 异常:读取失败,套接字可能关闭或超时,读取 ret:-1”

为啥耳机会连不上电脑蓝牙?

Android蓝牙连接问题

解决 安卓小程序蓝牙 重连失败的问题

Mac电脑蓝牙不可用怎么办