Как подключить два устройства Bluetooth SPP в одном приложении? - PullRequest
0 голосов
/ 03 мая 2018

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

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Эта тема внутри моего класса обслуживания.
Во-первых, свяжите службу и создайте метод в классе службы следующим образом: вызовите этот метод и передайте Bluetooth 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();
        }
    }
}

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

0 голосов
/ 07 мая 2018

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...