我如何在两台设备之间通过蓝牙连接和发送数据?

时间:2016-11-30 14:59:42

标签: android

我需要知道如何在两台设备之间通过蓝牙连接和发送数据。目前,我唯一知道的是如何打开并找到蓝牙设备。

我正在制作一个使用蓝牙在两个设备之间播放的小视频游戏,但我不明白如何在它们之间建立连接,如何使用bluetoothSockets,bluetoothServerSocket以及androids带给我的线程。

这是我所做的代码:

public class MainActivity extends AppCompatActivity {

    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

    static ListView dispositivos;

    ArrayList<String> adapter=new ArrayList();
    ArrayAdapter<String> adap;

    private static final int REQUEST_CONNECT_DEVICE_SECURE = 1;
    private static final int REQUEST_CONNECT_DEVICE_INSECURE = 2;
    private static final int REQUEST_ENABLE_BT = 3;

    public void con(View view){
        adapter.clear();
        if (!mBluetoothAdapter.isEnabled()) {
            Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
        }

        //checamos primero los dispositivos enlazados
        Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
        if (pairedDevices.size() > 0) {
            for (BluetoothDevice device : pairedDevices) {
                adapter.add(device.getName() + "\n" + device.getAddress());
            }
        }


        //vamos a buscar otros dispositivos
        mBluetoothAdapter.startDiscovery();
        IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
        registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy

        adap=new ArrayAdapter<>(MainActivity.this,android.R.layout.simple_list_item_1, adapter);
        dispositivos.setAdapter(adap);

    }


    //metodo de busqueda que agrega cada dispositivo que se encuentre a la lista
    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

                adap.add(device.getName() + "\n" + device.getAddress());
            }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dispositivos=(ListView)findViewById(R.id.lista);
    }
}

1 个答案:

答案 0 :(得分:1)

要在两台设备之间建立蓝牙连接并交换数据,您需要执行以下步骤:

  1. 查找并配对设备
  2. 从设备(BluetoothServerSocket
  3. 启动连接
  4. 接受连接并创建双向数据流
  5. -1 您已经说过已经知道如何搜索设备,但here还有文档页面。 如果目标设备已配对但您不必执行发现,请向BluetoohAdapter询问paired devices

    -2 蓝牙连接必须从某个地方开始,因此设备必须对其进行初始化并充当服务器;要做到这一点,你必须创建一个BluetoothServerSocket。 你可以找到一步一步的解释here;基本上一旦你创建了它,这个服务器套接字就会继续监听传入连接的请求,如果请求被接受,则返回一个有效的BluetoothSocket。 请注意,连接的请求必须来自其他设备,因此智能手机一如既往地here负责此文档。

    -3 使用您的两个新BluetoothSocket,您可以为每个设备检索一对流,一个输入一个输出和一个输出一个。 现在,您必须manage the connection从特定流

    发送和接收数据

    重要提示:蓝牙活动繁重且异步,因此必须在主线程上执行。 创建Thread并覆盖其run()方法以执行每项操作:

    • 搜索

    • 侦听传入请求(服务器端)

    • 管理连接(双方)

    在我链接的每个文档段落的末尾,您可以找到一些代码示例,教您如何执行该特定任务。

    开始尝试,如果您遇到错误或卡住了,请求帮助。