G
Godsplan
Neues Mitglied
- 0
Moin Moin!
Ich bin noch Android Anfänger, verstehe jedoch schon vieles ganz gut denke ich.
Meine App baut eine Bluetooth Verbindung als Server auf und hält diese. Das funktioniert gut.
Hierfür habe ich folgende Klasse von PieterDD herangezogen: LINK darf ich noch nicht posten
Im Grunde macht er nichts anderes als eine Bluetooth Verbindung aufzubauen und diese in einen Async Thread zu schieben.
Initiert wird das ganze in der Main Activity hiermit:
Wie man dort sieht kann ich mit "incomingData" die eingehenden Daten auswerten.
Mit der send() Methode kann ich an beliebiger Stelle im Programm auch Data nun verschicken.
Alles soweit schön und gut.
Jetzt mein Problem.
Ich habe hier eine Liste von Befehlen die ich per Bluetooth an meine Maschine senden möchte.
Beispiel
Befehl - Mach irgendwas - 10 Sekunden lang
Befehl - Mach irgendwas - 12 Sekunden lang
Befehl - Mach irgendwas - 5 Sekunden lang
........
Diese Befehle an die Maschine zu senden geht ja mit send() easy und das klappt auch wunderbar, nur macht Android das ja ganz schnell und somit führt meine Maschine immer nur den letzten Befehl aus der geschickt wurde.
Ich muss also eine Abfrage implementieren, wenn Befehl 1 geschickt wurde, warte bis Maschine "OK" gesagt hat und sende anschließend "Befehl 2". Bis die ganze Liste abgearbeitet ist.
Hier zu muss ich irgendwie ein Variable deklarieren die ich hin und her schalte, wenn etwas geschickt wurde "null" setzen. dann wird nichts mehr geschickt. Die RecieveMethode muss sie wieder "eins" setzen, wenn die maschine "ok" zurück gemeldet hat. Dann soll die Schleife weiter gehen und der Zweite befehl gesendet werden.
Wie kann ich soetwas umsetzen, ich muss ja eine Schleife anlegen und irgendwie Daten zwischen Methoden austauschen, die aber in einem Execute teilweise drin sind.
Hilfe
Der ursprüngliche Beitrag von 22:09 Uhr wurde um 23:02 Uhr ergänzt:
Ich habe mittlerweile eine Lösung gefunden, bin aber über weitere Vorschläge dankbar.
Schritt 1:
Button anlegen (Befehle schicken Starten)
Schritt 2: Go Befehl an Maschine senden, Maschine antwortet mit "los gehts"
Schritt 3: Bei der Abfrage für eingehende Daten von Bluetooth in der Activity wird dieses "los gehts" gefiltert und ein Zähler gesetzt auf z.B. 10 (für 10 Befehle). Diese 10 wird in in Textfeld neugeschrieben.
Ein addTextChangeListener registriert die Änderung. Hierdrin wird nun der erste Befehl losgeschickt und runtergezählt.
Wenn der Befehl ausgeführt wurde, registriert es wieder die Funktion für eingehende Bluetooth daten und ändert das Textfeld.
Dadurch wird wieder der ChangeListener aktiviert und so weiter.
Es funktioniert schon!
Die Befehle packe ich jetzt in ein Array das ich dann halt je nach Befehl einfach verschicke!
Ich bin noch Android Anfänger, verstehe jedoch schon vieles ganz gut denke ich.
Meine App baut eine Bluetooth Verbindung als Server auf und hält diese. Das funktioniert gut.
Hierfür habe ich folgende Klasse von PieterDD herangezogen: LINK darf ich noch nicht posten
Im Grunde macht er nichts anderes als eine Bluetooth Verbindung aufzubauen und diese in einen Async Thread zu schieben.
Initiert wird das ganze in der Main Activity hiermit:
Code:
BtClientTask clientTask = new BtClientTask(target);
clientTask.execute(new BtConnectionEstablishedCallback() {
@Override
public void connectionEstablished(BluetoothSocket socket) {
_btCurCon = new BtConnectionTask(socket, new BtIncomingDataCallback() {
@Override
public void incomingData(String text) {
label.setText(text);
}
});
_btCurCon.execute();
_btCurCon.send("Hello world!");
}
});
Wie man dort sieht kann ich mit "incomingData" die eingehenden Daten auswerten.
Mit der send() Methode kann ich an beliebiger Stelle im Programm auch Data nun verschicken.
Alles soweit schön und gut.
Jetzt mein Problem.
Ich habe hier eine Liste von Befehlen die ich per Bluetooth an meine Maschine senden möchte.
Beispiel
Befehl - Mach irgendwas - 10 Sekunden lang
Befehl - Mach irgendwas - 12 Sekunden lang
Befehl - Mach irgendwas - 5 Sekunden lang
........
Diese Befehle an die Maschine zu senden geht ja mit send() easy und das klappt auch wunderbar, nur macht Android das ja ganz schnell und somit führt meine Maschine immer nur den letzten Befehl aus der geschickt wurde.
Ich muss also eine Abfrage implementieren, wenn Befehl 1 geschickt wurde, warte bis Maschine "OK" gesagt hat und sende anschließend "Befehl 2". Bis die ganze Liste abgearbeitet ist.
Hier zu muss ich irgendwie ein Variable deklarieren die ich hin und her schalte, wenn etwas geschickt wurde "null" setzen. dann wird nichts mehr geschickt. Die RecieveMethode muss sie wieder "eins" setzen, wenn die maschine "ok" zurück gemeldet hat. Dann soll die Schleife weiter gehen und der Zweite befehl gesendet werden.
Wie kann ich soetwas umsetzen, ich muss ja eine Schleife anlegen und irgendwie Daten zwischen Methoden austauschen, die aber in einem Execute teilweise drin sind.
Hilfe
Der ursprüngliche Beitrag von 22:09 Uhr wurde um 23:02 Uhr ergänzt:
Ich habe mittlerweile eine Lösung gefunden, bin aber über weitere Vorschläge dankbar.
Schritt 1:
Button anlegen (Befehle schicken Starten)
Schritt 2: Go Befehl an Maschine senden, Maschine antwortet mit "los gehts"
Schritt 3: Bei der Abfrage für eingehende Daten von Bluetooth in der Activity wird dieses "los gehts" gefiltert und ein Zähler gesetzt auf z.B. 10 (für 10 Befehle). Diese 10 wird in in Textfeld neugeschrieben.
Ein addTextChangeListener registriert die Änderung. Hierdrin wird nun der erste Befehl losgeschickt und runtergezählt.
Wenn der Befehl ausgeführt wurde, registriert es wieder die Funktion für eingehende Bluetooth daten und ändert das Textfeld.
Dadurch wird wieder der ChangeListener aktiviert und so weiter.
Es funktioniert schon!
Die Befehle packe ich jetzt in ein Array das ich dann halt je nach Befehl einfach verschicke!