2

我正在为两个玩家构建tic tac,需要蓝牙连接来交换一些数据,我可以启用蓝牙,启用发现能力,但我在“BluetoothServerSocket”和客户端“BluetoothSocket”中的问题,我不知道如何操作这部分,这是代码:

ArrayList<String>al=new ArrayList<String>();
        BluetoothAdapter ba = BluetoothAdapter.getDefaultAdapter();
        Set<BluetoothDevice> pairedDevices = ba.getBondedDevices();


        if(pairedDevices.size()>0)  
            for(BluetoothDevice d: pairedDevices)
                al.add(d.getName()+" , "+d.getAddress());

                    if (!ba.isEnabled()) 
                       ba.enable();

                    BluetoothDevice device;
                    Intent dis=new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
                    dis.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,300);
                    startActivity(dis);

                    BluetoothSocket socket = device.createRfcommSocketToServiceRecord(UUID);
                    socket.connect();

                    InputStream is=socket.getInputStream();
                    OutputStream os=socket.getOutputStream();
4

3 回答 3

1

两个播放器都将通过“BluetoothSocket”进行通信,您可以使用 InputStreams 和 OutputStreams 发送/接收数据。但是要获得这样一对套接字,您可以这样做:

在一个播放器的一侧创建 BluetoothServerSocket,另一个连接到它。BluetoothServerSocket 使用 'accept' 方法侦听连接,该方法会阻塞直到客户端 BluetoothSocket 连接到它。之后,BluetoothServerSocket.accept() 方法返回一个 BluetoothSocket,它可以与客户端 Btsocket 一起用于 2 路信息传输。

希望这可以帮助...

PS:createRfcommSocketToServiceRecord 只是创建了上面提到的一个这样的客户端。您可以为双方使用相同的 UUID

于 2012-04-13T22:46:48.203 回答
0

看来您在数据交换方面遗漏了很多复杂性。主要是你需要处理线程来监听/发送数据。在这里,您可以完整地实现我所说的内容:https ://github.com/buddles/AndBT/blob/master/AndBT/src/br/pucrs/tcii/BluetoothService.java

您是否考虑过使用已经实现的库?这个项目带有一个井字游戏示例和一个最多支持七个连接的聊天应用程序:https ://github.com/buddles/AndBT

于 2014-02-05T10:32:44.117 回答
0

你可以参考这个链接。这是一个简单的蓝牙聊天应用程序。您可以修改此应用程序以发送和接收所需的数据。

于 2014-03-14T11:12:08.100 回答