如何在同一个应用程序中连接两个蓝牙SPP设备?

时间:2018-05-03 20:52:46

标签: android bluetooth android-bluetooth rfcomm spp

我想知道,是否有人知道如何连接同一个应用程序中的两个蓝牙SPP设备?我查看了BluetoothChat示例,但是,它没有提供有关如何连接到两个蓝牙SPP设备的任何信息。我似乎无法在其他地方找到太多信息。

2 个答案:

答案 0 :(得分:0)

我们假设我们有两个蓝牙设备B和C.要连接它们,我们需要

  1. 蓝牙套接字,每个设备一个。

  2. 输入和输出流以发送消息。

  3. 连接参数:{蓝牙设备(MAC地址),UUID}

    要拥有多个连接,我们必须创建专用于连接的这些连接参数。

答案 1 :(得分:0)

此主题位于我的服务类中 首先,绑定服务并在服务类中创建一个这样的方法, 调用此方法并传递蓝牙mac地址。它将在后台连接。对于第二个设备也遵循类似的程序。

    public synchronized void connectToDevice(String macAddress){
    BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(macAddress);
    if (mState == STATE_CONNECTING){
        if (mConnectThread != null){
            mConnectThread.cancel();
            mConnectThread = null;
        }
    }
    if (mConnectedThread != null){
        mConnectedThread.cancel();
        mConnectedThread = null;
    }
    mConnectThread = new ConnectBtThread(device);
    toast("connecting");
    mConnectThread.start();
    setState(STATE_CONNECTING);
}

这里我创建Thread类来连接并在后台运行

    private class ConnectBtThread extends Thread{
    private final BluetoothSocket mSocket;
    private final BluetoothDevice mDevice;

    public ConnectBtThread(BluetoothDevice device){
        mDevice = device;
        BluetoothSocket socket = null;
        try {
            socket = device.createInsecureRfcommSocketToServiceRecord(UUID.fromString(B_UUID));
        } catch (IOException e) {
            e.printStackTrace();
        }
        mSocket = socket;

    }

    @Override
    public void run() {
        if (mBluetoothAdapter.isDiscovering()){
            mBluetoothAdapter.cancelDiscovery();
        }

        try {
            mSocket.connect();
            Log.d("service","Bluetooth one running (connected)");
            SharedPreferences pre = getSharedPreferences("BT_NAME",0);
            pre.edit().putString("bluetooth_connected",mDevice.getName()).apply();
             int i = 0;
            Log.d("service","one + " +i++);

        } catch (IOException e) {

            try {
                mSocket.close();
                Log.d("service","connect thread run method ( close function)");
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }
        connected(mSocket);

    }

    public void cancel(){

        try {
            mSocket.close();
            //Toast.makeText(getApplicationContext(),"Failed to connect one",Toast.LENGTH_SHORT).show();
            Log.d("service","connect thread cancel method");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

与此类似,再创建一个方法和线程类,以使两个蓝牙设备保持连接状态。 我跟着这个,它对我来说很好。