首页 > 解决方案 > 如何在同一个应用程序中连接两个蓝牙 SPP 设备?

问题描述

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

标签: androidbluetoothandroid-bluetoothrfcommspp

解决方案


该线程在我的服务类中。
首先,像这样绑定服务并在服务类中创建一个方法,调用该方法并传递蓝牙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();
        }
    }
}

与此类似,再创建一个方法和线程类以将两个蓝牙设备保持在已连接状态。我遵循了这一点,它对我来说工作正常。


推荐阅读