两个Android设备之间的蓝牙数据传输

时间:2014-01-19 18:42:45

标签: java android bluetooth transfer

我一直关注this Android guide进行蓝牙通信

为了准确解释我想要做什么,当两个设备配对时,在每个设备(服务器和客户端)上打开两个不同的活动,在服务器活动上我有不同的按钮,在客户端活动上只有文本视图。 我希望能够按下服务器设备上的按钮并将其显示在客户端上。

我已设法在两个设备之间建立连接,但现在我想发送我无法做的数据。

他们提供此数据传输代码:

private class ConnectedThread extends Thread {
private final BluetoothSocket mmSocket;
private final InputStream mmInStream;
private final OutputStream mmOutStream;

public ConnectedThread(BluetoothSocket socket) {
    mmSocket = 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);
            // Send the obtained bytes to the UI activity
            mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer)
                    .sendToTarget();
        } catch (IOException e) {
            break;
        }
    }
}

/* Call this from the main activity to send data to the remote device */
public void write(byte[] bytes) {
    try {
        mmOutStream.write(bytes);
    } catch (IOException e) { }
}

/* Call this from the main activity to shutdown the connection */
public void cancel() {
    try {
        mmSocket.close();
    } catch (IOException e) { }
}
}

但这一行会产生错误

// Send the obtained bytes to the UI activity
            mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer).sendToTarget();

指南中没有解释。我不知道mHandler是什么或者做什么。

除了错误之外,我甚至不知道在哪里放这个代码。它应该在我打开还是在主要的第二个活动(服务器和客户端)中?如果在Server活动中,是否应该在onClick方法中为每个按钮发送不同字节代码的所有按钮?在这段代码中,我们如何区分发送者和接收者?

5 个答案:

答案 0 :(得分:12)

查看Google在SDK中提供的BluetoothChat示例。它将向您展示如何通过蓝牙实现基本的文本发送。

答案 1 :(得分:1)

您还可以尝试教程示例here

答案 2 :(得分:0)

mHandler用于将消息从您的BluetoothHandle.java传递到您的Activity。这将帮助您更新屏幕上由BluetoothHandler返回的消息。

你必须从你的活动中创建mHandler并像这样调用你的处理程序 -

<强> mBluetoothHandler = new BluetoothHandler(this, mHandler);

你的BluetoothHandler.java有这样的构造函数 -

public class BluetoothHandler { 

    public BluetoothHandler(Context context, Handler handler) {
            mAdapter = BluetoothAdapter.getDefaultAdapter();
            mState = STATE_NONE;
            mHandler = handler;
            mcontext = context;
   }

}

有关详细信息,请参阅蓝牙聊天的Android示例项目。 您也可以使用此链接: http://myandroidappdevelop.blogspot.in/2013/05/bluetooth-chat-example.html

答案 3 :(得分:0)

您能否描述一下您所看到的错误?

正如Ankit和Addy所知,BlueToothChat是您推荐的最佳代码。通过将其加载到2个Android设备上进行实验 - 使用一个作为客户端的服务器来交换它们之间的消息。这样的实验将帮助您理解它的代码并决定您的编码逻辑。

答案 4 :(得分:0)

// Enter code here

Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        byte[] writeBuf = (byte[]) msg.obj;
        int begin = (int)msg.arg1;
        int end = (int)msg.arg2;

        switch(msg.what) {
            case 1:
                String writeMessage = new String(writeBuf);
                writeMessage = writeMessage.substring(begin, end);
                break;
        }
    }
};