# Androidstudio Bluetooth connect



## Keiner (3. Nov 2021)

Moin,

Ich programmiere gerade eine Android app (mit Java) welche sich mit einem ESP32 über "normales" Bluetooth verbinden und auf knopfdruck bestimmte daten senden soll. Dazu nutze ich folgende libary: https://github.com/harry1453/android-bluetooth-serial . In der Beispiel app der libary funktioniert alles wie es soll. Da die app sich immer mit dem selben esp32 verbinden soll verzichte ich in meiner app aufe eine geräte-auswahl. Nun zum problem: immer wenn sich die app mit dem esp32 verbinden soll stürtzt sie ab.
[CODE lang="java" highlight="3-6"]public void connect() {
    if (!connectionAttemptedOrMade) {
        compositeDisposable.add(bluetoothManager.openSerialDevice("XX:XX:XX:XX:XX:XX")
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(device -> onConnected(device.toSimpleDeviceInterface()), t -> {
                        createToast("Verbindung konnte nicht hergestellt werden!");
                        connectionAttemptedOrMade = false;
                        connectionStatusData.postValue(ConnectionStatus.DISCONNECTED);
                    }));
            connectionAttemptedOrMade = true;
            connectionStatusData.postValue(ConnectionStatus.CONNECTING);
        }

    }

private void onConnected(SimpleBluetoothDeviceInterface deviceInterface) {
        this.deviceInterface = deviceInterface;
        if (this.deviceInterface != null) {
            connectionStatusData.postValue(ConnectionStatus.CONNECTED);
            this.deviceInterface.setListeners(this:nMessageReceived, this:nMessageSent, t -> createToast("Fehler beim senden!"));
            createToast("verbunden!");
            messages = new StringBuilder();
            messagesData.postValue(messages.toString());
        } else {
            createToast("verbinden fehlgeschlagen!");
            connectionStatusData.postValue(ConnectionStatus.DISCONNECTED);
        }
    }

    private void onMessageReceived(String message) {
        messages.append("Car ").append(": ").append(message).append('\n');
        messagesData.postValue(messages.toString());
    }

    private void onMessageSent(String message) {
        messages.append(getApplication().getString(R.string.you_sent)).append(": ").append(message).append('\n');
        messagesData.postValue(messages.toString());
        messageData.postValue("");
    }[/CODE]

(Die mac-adresse habe ich hier durch X'se ersetzt)
Meinen Fehler konnte ich auf die Markierte stelle eingrenzen. Ich bin mir sogar sicher, dass das Program nichts mit "device" anfangen kann, da ich glaube, dass es definert wird wenn man ein Gerät auswählt.

MfG


----------



## kneitzel (3. Nov 2021)

Dann schau doch erst einmal ins logcat um die genaue Meldung zu bekommen, mit der Applikation abstürzt. Das ist mit die wichtigste Grundlage bei der Entwicklung: An die Meldungen heran kommen, wenn etwas nicht so läuft, wie es soll.


----------



## Jw456 (4. Nov 2021)

Hallo 

compositeDisposable.add(bluetoothManager.openSerialDevice("XX:XX:XX:XX:XX:XX")

Die Mac Adresse   hier direkt zuübergeben macht keinen sinn . Es wird auch noch an anderer stelle auf die Adresse zugeriffen.
Du musst sie schon auch in dem Model in der Instanz Variablen speichern.
Mac und DeviceName 
Also übergebe es dem Intent  oder füge die werte in die  Activity direkt ein und übergebe es dem Model wo du ja auch die Verbindung machst.


----------



## Jw456 (4. Nov 2021)

ps hier in der activity werde die Daten Mac und Name Übergeben.

```
if (!viewModel.setupViewModel(getIntent().getStringExtra("device_name"), getIntent().getStringExtra("device_mac"))) {
```
wenn nicht über einen Intent solltest du zu mindesten die Daten mit der setViewModel Methode übergeben. Nicht direkt im Model.


----------



## Jw456 (4. Nov 2021)

edit welche art oder schreibweise der Mac er in seine Lib benutz solltest du testen.
oder dir mal ausgeben lassen

78-92-9C-46-B5-14
78:92:9C:46:B5:14
78929C46B514


----------



## Jw456 (4. Nov 2021)

Frage ist der esp überhaupt mit deinem Handy  gepaart also in der pairedDeviceList  enthalten?


----------



## Keiner (4. Nov 2021)

Vielen dank für eure hilfe, 
durch eure antworten ist mir aufgefallen, dass mein Problem war, dass ich einfach sämtlichen code in die MainActivity.java-datei gepakt habe, nachdem ich dann eine ViewModel datei angelegt habe und alles nochmal neu gemacht habe hat es funktioniert.

MfG


----------

