Как подключить два устройства Bluetooth SPP в одном приложении?

Мне было интересно, кто-нибудь знает, как подключиться к двум устройствам Bluetooth SPP в одном приложении? Я просмотрел пример BluetoothChat, однако он не дает никакой информации о том, как подключиться к двум устройствам Bluetooth SPP. Я не могу найти много информации в другом месте.


person Pink Jazz    schedule 03.05.2018    source источник


Ответы (2)


Предположим, у нас есть два Bluetooth-устройства B и C. Чтобы их подключить, нам нужно

  1. Разъемы Bluetooth, по одному на каждое устройство.

  2. Входные и выходные потоки для отправки сообщений.

Параметры подключения: { Устройство Bluetooth (MAC-адрес), UUID}

Чтобы иметь несколько соединений, мы должны создать эти параметры соединения, предназначенные для соединения.

person Amrit kumar    schedule 07.05.2018

Этот поток находится внутри моего класса обслуживания.
Во-первых, свяжите службу и создайте метод в классе обслуживания, подобный этому, вызовите этот метод и передайте MAC-адрес Bluetooth. он будет подключаться в фоновом режиме. для второго устройства также выполните аналогичную процедуру.

    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();
        }
    }
}

Аналогично этому создайте еще один метод и класс потока, чтобы оба устройства Bluetooth оставались в состоянии «Подключено». Я следовал за этим, и он отлично работает для меня.

person Bhanu Prakash Pasupula    schedule 08.05.2018