我已经借助在 Internet 上找到的教程编写了一个连接到蓝牙设备的 Android 应用程序。此应用程序使用 InputStream 和 OutputStream 对象进行连接并建立连接。因为我必须传输少量数据,所以这个解决方案是可行的,因为我只能发送字节。
现在我想更改我的旧代码以使用 DataInputStream 和 DataOutputStream 轻松发送复杂数据。我试图通过简单地在我的 InputStream 和 OutputStream 之前添加数据标识符来修改我的原始代码,但这在我的代码中造成了错误。有人可以向我解释如何正确使用 DataInputStream 和 DataOutputStream 这样我就不会出错。这是我的旧代码:
private class ConnectedThread extends Thread {
private final InputStream mmInStream;
private final OutputStream mmOutStream;
public ConnectedThread(BluetoothSocket socket) {
InputStream tmpIn = null;
OutputStream tmpOut = null;
// Get the input and output streams, using temp objects because
// member streams are final
try {
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (IOException e) { }
mmInStream = tmpIn;
mmOutStream = tmpOut;
}
public void run() {
byte[] buffer = new byte[1024]; // buffer store for the stream
int bytes; // bytes returned from read()
// Keep listening to the InputStream until an exception occurs
while (true) {
try {
// Read from the InputStream
bytes = mmInStream.read(buffer); // Get number of bytes and message in "buffer"
hBluetooth.obtainMessage(RECEIVE_MESSAGE, bytes, -1, buffer).sendToTarget(); // Send to message queue Handler
} catch (IOException e) {
break;
}
}
}
/* Call this from the main activity to send data to the remote device */
public void send(String message) {
if(D) Log.d(TAG, "...Data to send: " + message + "...");
if (btSocket != null && btSocket.isConnected()) {
byte[] msgBuffer = message.getBytes();
try {
mmOutStream.write(msgBuffer);
Log.e(TAG, "Int" +msgBuffer);
} catch (IOException e) {
Log.d(TAG, "...Error data send: " + e.getMessage() + "...");
}
}
}
这里是修改后的版本:
private class ConnectedThread extends Thread {
DataInputStream mmInStream;
DataOutputStream mmOutStream;
public ConnectedThread(BluetoothSocket socket) {
InputStream tmpIn = null;
OutputStream tmpOut = null;
mmInStream = new DataInputStream(tmpIn);
mmOutStream = new DataOutputStream(tmpOut);
// Get the input and output streams, using temp objects because
// member streams are final
try {
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (IOException e) { }
mmInStream = tmpIn;
mmOutStream = tmpOut;
}
感谢您的任何意见!
最佳答案
如果我正确理解了你的问题,那么做这样的事情来获取 DataInputStream 和 DataOutputStream 对象:
mmInStream = new DataInputStream(tmpIn);
mmOutStream = new DataInputStream(tmpOut);
如果您需要它们是全局的,那么这些变量将在类外像下面这样声明,正如我从您所做的编辑中看到的那样:
DataInputStream mmInStream;
DataOutputStream mmOutStream;
编辑更新的问题:
public ConnectedThread(BluetoothSocket socket) {
InputStream tmpIn = null;
OutputStream tmpOut = null;
// Get the input and output streams, using temp objects because
// member streams are final
try {
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (IOException e) { }
mmInStream = new DataInputStream(tmpIn);
mmOutStream = new DataOutputStream(tmpOut);
}
关于android - 用于蓝牙通信的 OutputStream 到 DataOutputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15421476/