当前位置: 首页 > 面试题库 >

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

孟振
2023-03-14
问题内容

我一直在遵循Android蓝牙通讯指南

为确切说明我要做什么,将两个设备配对后,每个设备(服务器和客户端)上都会打开两个不同的活动,其中服务器活动上我有不同的按钮,而客户端活动上只有一个textview。我希望能够按服务器设备上的按钮并将其显示在客户端上。

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

他们给出了以下代码进行数据传输:

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或做什么。

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


问题答案:

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



 类似资料:
  • 我对同一主题进行了研究,发现android设备是a2dp源,音频只能从a2dp源流式传输到a2dp接收器。A2dp接收器可以是蓝牙耳机或蓝牙扬声器。 但我的问题是,Android应用程序“蓝牙音乐播放器”是如何工作的? 它允许从一部手机到另一部手机进行流媒体传输。因此,在这种情况下,收听移动设备必须充当接收器。这怎么可能?他们是否使用其他配置文件而不是a2dp? 好吧,这可能是他们使用的不同配置文

  • 有人遇到过解释如何做到这一点的文档/教程吗?技术上有可能吗?或者苹果有没有施加某种限制来阻止这种情况? 我发现的另一个选择是蓝牙上的Bonjour。这是否是一个更适合这种类型的操作的选择?

  • 我正在考虑构建一个Android应用程序,允许通过蓝牙将音频流式传输到Android手机。我以前在Stackoverflow上读过类似的问题,根据我的理解,A2DP不能用,因为Android不能成为A2DP接收器。 理论上,我认为HFP或HFP AG等配置文件应允许双向音频流。在Android API中,有没有办法强制蓝牙配对遵循此配置文件,或者操作系统是否决定使用哪种配置文件(例如仅当有电话呼叫

  • 问题内容: 我正在使用蓝牙聊天功能,以便连接和接收来自蓝牙设备的数据。 我使用以下代码读取数据: 设备一直在发送数据而不会停止。 通过上面的代码,我得到以下消息: 然后转到下一行: 并且永远不会从该呼叫中返回。我猜这是因为它开始从设备读取数据,并且直到断开连接才停止。如何一次读取一定数量的字节? 编辑 除非由于它不保留代码,否则不从设备取回任何数据? 问题答案: 我改用DataInputStrea

  • 我如何获得Android所有已连接蓝牙设备的列表,而不考虑配置文件? 或者,我看到您可以通过BluetoothManager获取特定配置文件的所有连接设备。获取连接的设备。 我想我可以通过ACTION_ACL_CONNECTED/ACTION_ACL_DISCONNECTED监听连接/断开来查看哪些设备连接...似乎容易出错。 但我想知道是否有更简单的方法来获取所有已连接蓝牙设备的列表。

  • 我正在开发一款连接蓝牙物联网设备的Flitter应用程序。我正在使用Flatter_blue图书馆。该库允许扫描附近的蓝牙设备。基于该扫描,您可以“连接”到设备。没有与设备配对的概念。 根据我以前在手机上使用蓝牙的经验(连接到我的汽车和蓝牙扬声器时),我必须在Android操作系统上配对设备。 我很好奇,从高层次上讲,配对设备和连接设备之间有什么区别。此外,更具体地说,在操作系统内配对设备与扫描并