如何通过蓝牙将数据包发送到其他蓝牙设备

时间:2016-02-14 17:32:42

标签: java android bluetooth distance

我正在开发一个测量两个移动设备之间距离的Android应用程序。我已经能够获得附近启用wifi的设备的rssi,然后我用它来粗略计算通常没有很高精度的距离。为了提高准确性,我还想测量往返时间。

所以我的问题是,如果可能的话,你怎么能通过蓝牙或wifi信号从一个Android设备发送数据包然后收到响应?此外,设备必须在每种情况下配对,还是知道足够的mac地址?

1 个答案:

答案 0 :(得分:0)

快速搜索谷歌将引导您进入Android开发教程。 There你应该找到问题的答案。但总结一下:要通过蓝牙找到其他设备,您可以使用蓝牙适配器。在那里,您可以尝试发现新的蓝牙设备或查询之前已连接到Android设备的设备列表。

使用OutputStream.write()

进行InputStream.read()阅读时发送数据包

您可以在开发站点找到一个示例,但简而言之,它可能看起来像这样(教程中提供的示例的修改版本):

        InputStream is = null;
        OutputStream os = null;
 public ConnectedThread(BluetoothSocket socket) {
     try{
            is= socket.getInputStream();
            os = socket.getOutputStream();
        } catch (IOException e) { System.out.println(e); }
    }

    public void run() {
        byte[] buffer = new byte[1024];  // buffer store for the stream
        int bytes=0; // bytes returned from read()

        // Keep listening to the InputStream until an exception occurs or the stream ends
        while (bytes != -1) {
            try {
                // Read from the InputStream, the read bytes will be stored in the array
                bytes = is.read(buffer); //reads 1024 bytes into the buffer
            } catch (IOException e) {
                System.out.println(e);
                break;
            }
        }
    }

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