Java 在android中从蓝牙设备读取数据

Java 在android中从蓝牙设备读取数据,java,android,bluetooth,Java,Android,Bluetooth,我正在使用蓝牙聊天,以便连接和接收来自蓝牙设备的数据 我使用以下代码读取数据: public void run() { byte[] buffer = new byte[1024]; int bytes; Log.v("MR", "start listening...."); // Keep listening to the InputStream while connected while (true) { try {

我正在使用蓝牙聊天,以便连接和接收来自蓝牙设备的数据

我使用以下代码读取数据:

public void run() {
    byte[] buffer = new byte[1024];
    int bytes;
    Log.v("MR", "start listening....");

    // Keep listening to the InputStream while connected
    while (true) {
        try {
            // Read from the InputStream
            Log.d("MR", "buffer in try");

            bytes = mmInStream.read(buffer);
            Log.d("MR", "input stream :"+(new String(buffer)));
            // Send the obtained bytes to the UI Activity
            mHandler.obtainMessage(Conn.MESSAGE_READ, bytes, -1, buffer).sendToTarget();
            Log.d("MR", "buffer after");

        } catch (Exception e) {
            Log.e("MR", "Error :"+e.getMessage());
            //
            connectionLost();
           // break;
        }

        Log.d("MR", "buffer after while");
    }
}
设备一直在不停地发送数据

通过以上代码,我得到了以下信息:

Log.d("MR", "buffer in try");
然后转到下一行:

bytes=mmInStream.read(buffer);
再也不会从电话里回来。我猜这是因为它开始从设备读取数据,直到断开连接才停止。如何一次读取一定数量的字节

编辑


除非它停留在
bytes=mmInStream.read(缓冲区)由于它不存在而产生的代码;无法从设备上恢复任何数据?

我使用DataInputStreams,因为您可以使用readFully()方法,该方法在返回之前等待读取一定数量的字节。我按如下方式设置BT连接:

BluetoothDevice btDevice = bta.getRemoteDevice(macAddress);
BluetoothSocket btSocket = InsecureBluetooth.createRfcommSocketToServiceRecord(
                    btDevice, UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"), false);

btSocket.connect();
InputStream input = btSocket.getInputStream();
DataInputStream dinput = new DataInputStream(input);
之后,当我想阅读时,我会使用Readfull:

dinput.readFully(byteArray, 0, byteArray.length);

问题可能不是我必须在上面写。我想它一定是用来通讯的港口。这两个设备是否可以连接,但在插座上没有任何传输操作系统存在通信问题?上传投票会很好lol…希望您获得了一些成功有完全相同的问题不安全的蓝牙。是您创建的类,或者是我必须导入的类,或者是因为我找不到任何内容而必须导入的类?您可以从这里获取unsecureBluetooth.java…我已经尝试过了,并在设备上进行了连接。我还使用bond state检查是否连接,并得到返回代码12,这意味着这是正常的,但我仍然没有从设备返回到android设备的任何数据。连接的套接字可能有任何问题,我注意到当我禁用蓝牙设备并将数据发送到android设备上的设备时,我会收到IOException。如果我没有做错,这意味着套接字已关闭,无法发送或接收数据?如果我在这一点上是正确的,为什么在我关闭蓝牙设备之前它没有接收到任何数据?请逐步完成调试器并查看代码停止的位置,您可能也会在不知道的情况下抛出错误,因此请将所有内容包装在try-catch中,然后从那里开始。如果它在readFully或read时停止,并且从未出现,那么设备没有发送任何数据是正确的。