Bluetooth не удается подключиться к OBD2 - PullRequest
0 голосов
/ 15 января 2019

Я использую одно приложение, которое я нашел на github, чтобы иметь возможность протестировать и посмотреть, как работает Bluetooth-чат с моим ELM327, но когда я подключаюсь и пытаюсь подключиться к нему, соединение не удается. После этого я попытался получить свой старый телефон и установить соединение с ним, и это работало. Я мог бы даже отправить данные без проблем. Я думаю, что это может быть что-то с Bluetooth Low Energy (я новичок в Java и программировании, так что это просто пари), но я не знаю, как это выяснить, так как logcat не дает мне ошибки, приложение просто говорят, что не удается подключить устройство.

Вот источник приложения, которое я использую для тестирования и изучения: https://github.com/DevExchanges/BluetoothChatAppAndroid

 // runs while listening for incoming connections
private class AcceptThread extends Thread {
    private final BluetoothServerSocket serverSocket;

    public AcceptThread() {
        BluetoothServerSocket tmp = null;
        try {
            tmp = bluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord(APP_NAME, MY_UUID);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        serverSocket = tmp;
    }

    public void run() {
        setName("AcceptThread");
        BluetoothSocket socket;
        while (state != STATE_CONNECTED) {
            try {
                socket = serverSocket.accept();
            } catch (IOException e) {
                break;
            }

            // If a connection was accepted
            if (socket != null) {
                synchronized (ChatController.this) {
                    switch (state) {
                        case STATE_LISTEN:
                        case STATE_CONNECTING:
                            // start the connected thread.
                            connected(socket, socket.getRemoteDevice());
                            break;
                        case STATE_NONE:
                        case STATE_CONNECTED:
                            // Either not ready or already connected. Terminate
                            // new socket.
                            try {
                                socket.close();
                            } catch (IOException e) {
                            }
                            break;
                    }
                }
            }
        }
    }

    public void cancel() {
        try {
            serverSocket.close();
        } catch (IOException e) {
        }
    }
}

// runs while attempting to make an outgoing connection
private class ConnectThread extends Thread {
    private final BluetoothSocket socket;
    private final BluetoothDevice device;

    public ConnectThread(BluetoothDevice device) {
        this.device = device;
        BluetoothSocket tmp = null;
        try {
            tmp = device.createInsecureRfcommSocketToServiceRecord(MY_UUID);
        } catch (IOException e) {
            e.printStackTrace();
        }
        socket = tmp;
    }

    public void run() {
        setName("ConnectThread");

        // Always cancel discovery because it will slow down a connection
        bluetoothAdapter.cancelDiscovery();

        // Make a connection to the BluetoothSocket
        try {
            socket.connect();
        } catch (IOException e) {
            try {
                socket.close();
            } catch (IOException e2) {
            }
            connectionFailed();
            return;
        }

        // Reset the ConnectThread because we're done
        synchronized (ChatController.this) {
            connectThread = null;
        }

        // Start the connected thread
        connected(socket, device);
    }

    public void cancel() {
        try {
            socket.close();
        } catch (IOException e) {
        }
    }
}

1 Ответ

0 голосов
/ 15 января 2019

Начиная с Android 6 и выше, вы должны включить местоположение на телефоне, чтобы BLE работал. Недостаточно предоставить разрешение на местоположение приложения. Вы можете прочитать больше об этом здесь .

...