Androidstudio Bluetooth connect

Keiner

Mitglied
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
 
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.
 
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.
 
ps hier in der activity werde die Daten Mac und Name Übergeben.
Java:
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.
 
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
 
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
 

Zurück
Oben