Bluetooth - RFCOMM - Dateitransfer

P

poeschi

Neues Mitglied
3
Hallo liebe Community,
ich habe folgendes Problem, vielleicht könnt ihr mir weiterhelfen:

Ich möchte eine Datei via Bluetooth übertragen, die dann von einem Bestimmten App entgegengenommen wird (je nach Dateityp, in meinem Fall sind es GPX-Dateien). Mein ursprünglicher Ansatz war, das Ganze via OPP (Obex/Object Push profile) zu lösen, allerdings fehlt mir dazu jeglicher Hintergrund.

Nun versuche ich das Ganze irgendwie mit RFCOMM zu lösen, aber auch hier bin ich mir nicht sicher, wie ich das machen soll...
Mein Plan wäre, einen Service zu schreiben, der irgendwie Bluetooth-Pairing überwacht, aber wie? Und das Ganze möglichst so, dass der Service bzw das App nur auf einen bestimmten Dateityp reagiert (GPX).
Einen Service zu schreiben ist ja nicht das Problem, eher die ganze Bluetooth-Geschichte.

Leider habe ich festgestellt, dass gerade hinsichtlich Bluetooth sehr wenig Dokus bzw. Tutorials im Netz zu finden sind und auch viele Communitys nicht allzuviel Rat geben konnten.
Das einzige, was ich bisher weiss ist, dass man wohl RFCOMM-daten recht einfach in Java verarbeiten kann (In/out-Streams) um sie dann abzuspeichern.

Ich probiere es hier mal auf gut Glück, ich würde mich über Lösungsansätze, Ideen, etc egal welcher Art sehr freuen, im Endeffekt kann es mich in meiner aktuellen Situation nur weiter bringen ;-)
Ich denke, auch andere Leute könnten davon profitieren.

Es würde mich sehr freuen, wenn der ein oder andere User hier einen Ratschlag zur Hand hätte.
Schöne Grüße aus Süddeutschland, Pöschi
 
Hi,
Die Beschreibung für Dein Vorhaben finde ich noch sehr dürftig! Vielleicht beschreibst Du mal ganz genau, was Du machen möchtest?
Ich habe leider auch nicht wirklich Ahnung von diesem Bluetooth-Zeugs, aber auch auf die Gefahr, dass ich hier alles verdrehe, versuche ich mal trotzdem ein bisschen zu helfen. Denn mich interessiert Bluetooth auf Android auch und vielleicht mischt sich ja noch der Eine oder Andere hier mit ein. :)
Ich selbst habe leider noch kein Android-Handy.

Ich möchte eine Datei via Bluetooth übertragen, die dann von einem Bestimmten App entgegengenommen wird (je nach Dateityp, in meinem Fall sind es GPX-Dateien). Mein ursprünglicher Ansatz war, das Ganze via OPP (Obex/Object Push profile) zu lösen, allerdings fehlt mir dazu jeglicher Hintergrund.
Der Hintergund ist eventuell aber wichtig!
Also Du möchtest "nur" eine Bluetooth Server-App schreiben, die nur GPX Dateien annimmt bzw. verarbeitet?
Die App, die die Dateien von dem anderen Gerät aus sendet, hast du schon?
Wenn Du eine Datei empfangen möchtest, um darauf zu reagieren, wäre es von Bedeutung, wie die Datei gesendet wird.

Mein Plan wäre, einen Service zu schreiben, der irgendwie Bluetooth-Pairing überwacht, aber wie?
Was meinst Du mit Überwachen?
Einfach nur gucken, welche Devices gepaired sind?
Mit
getBondedDevices()
geht da vielleicht was.

Und das Ganze möglichst so, dass der Service bzw. das App nur auf einen bestimmten Dateityp reagiert (GPX).
Also die Bluetooth Server-App soll reagieren?
Wenn Dein Android-Handy die Dateien über ein gewisses Bluetooth-Profil, was vielleicht schon standardmäßig implementiert ist (Obex Push oder FTP) empfangen kann, dann kann die Server-App (die ja dann keine eigentliche "Server"-App mehr ist) vielleicht einfach nur den Speicherort (falls bekannt), in dem die Dateien landen, überwachen und entsprechend "reagieren". Wenn das geht, wäre das vielleicht erst mal der einfachste Weg, denn Du scheinst Dich mit Bluetooth auch noch nicht so richtig befasst zu haben, oder?
Leider habe ich festgestellt, dass gerade hinsichtlich Bluetooth sehr wenig Dokus bzw. Tutorials im Netz zu finden sind und auch viele Communitys nicht allzuviel Rat geben konnten.
Die haben Dich vielleicht auch nicht verstanden? :)

Vielleicht versuchst Du mal, Dein Problem noch genauer zu beschreiben. Eventuell kann Dir dann hier auch besser geholfen werden.
 
Hi Jask,
erst einmal ein herzliches Dankeschön, dass du dir die Zeit nimmst, über mein Problem nachzudenken.
Tut mir echt leid, wenn ich da etwas verquert ausgedrückt habe. Ich versuche mal, das ganze zu erläutern:

Jask schrieb:
Der Hintergund ist eventuell aber wichtig!
Also Du möchtest "nur" eine Bluetooth Server-App schreiben, die nur GPX Dateien annimmt bzw. verarbeitet?
Die App, die die Dateien von dem anderen Gerät aus sendet, hast du schon?
Ja, und Ja. Die Gegenstelle existiert bereits, ich möchte "nur" ein "Server(!?)-App", dass die Dateien annimmt.

Jask schrieb:
Wenn Du eine Datei empfangen möchtest, um darauf zu reagieren, wäre es von Bedeutung, wie die Datei gesendet wird.
Wie meinst du das? Ich dachte da an eine Art "serielle" Verbindung über RFCOMM, da OPP nicht so richtig zu klappen scheint...

Jask schrieb:
Was meinst Du mit Überwachen?
Einfach nur gucken, welche Devices gepaired sind?
Jap, und zu schauen, ob da jetzt eine Datei ankommt, die entsprechendes Format hat.

Jask schrieb:
Also die Bluetooth Server-App soll reagieren?
Wenn Dein Android-Handy die Dateien über ein gewisses Bluetooth-Profil, was vielleicht schon standardmäßig implementiert ist (Obex Push oder FTP) empfangen kann, dann kann die Server-App (die ja dann keine eigentliche "Server"-App mehr ist) vielleicht einfach nur den Speicherort (falls bekannt), in dem die Dateien landen, überwachen und entsprechend "reagieren". Wenn das geht, wäre das vielleicht erst mal der einfachste Weg, denn Du scheinst Dich mit Bluetooth auch noch nicht so richtig befasst zu haben, oder?
Die haben Dich vielleicht auch nicht verstanden? :)
Ich dachte urspünglich daran, mittels eines Broadcast Receivers ein "Obex Push"-Event oder so abzuhören, allerdings gibt es so etwas nicht (konnte mir Google und die API bestätigen).
Allerdings ist das mit dem Verzeichnis überwachen auch ein interessanter Ansatz, an den ich bisher noch garnicht gedacht habe...

Jask schrieb:
Vielleicht versuchst Du mal, Dein Problem noch genauer zu beschreiben. Eventuell kann Dir dann hier auch besser geholfen werden.

Mh, dann versuch ich noch einmal "von vorne" zu beginnen:
Ich habe eine Bluetooth-Gegenstelle, die GPX-Daten via OPP (zur not aber auch via RFCOMM) sendet. Dabei ist das Android handy mit dieser Gegenstelle gepairt.
Nun wird irgendwann eine eben solche Datei gepusht, und das Handy soll diese quasi ohne sonstigen Eingriff vom Benutzer auf die SD-Karte speichern. Soweit der Use Case.

Das Problem besteht im Wesentlichen darin, zu erkennen, wann eine Datei mit diesem Format ankommt. Das App bzw der Service soll diese Datei entgegennehmen, validieren und abspeichern.

Interessanterweise lassen sich Dateien wie GIFs oder JPGs problemlos auf das Gerät pushen und werden in der Gallery im "Bluetooth"-ordner abgespeichert. Es wird oben in der runterziehbaren Statusleiste angezeigt, dass eine Datei gepusht werden soll, und der User muss den Empfang bestätigen.
Sobald ich das mit GPX oder sämtlichen anderen XML-Derivaten mache, wird weder irgendwas angenommen noch irgendwas oben in besagter Leiste angezeigt.
Eben so etwas schwebte mir zu Beginn vor...

Um zumindest eine ähnliche Funktionalität zu haben, hatte ich diesen Gedanken mit dem Service, der permanent im Hintergrund läuft. Dieser Service soll schauen, ob das Handy gepairt ist und sobald eine Datei kommt schauen, ob Sie eine GPX-Datei ist und wenn ja, den Inputstream nehmen und in eine Datei umleiten.

Ich hoffe, damit kannst du vielleicht etwas mehr anfangen ;-)
Wenn noch mehr Fragen da sind, dann bitte als her damit; Und ncohmal sry, dass ich beim ersten Post etwas unverständlich war.
 
Zuletzt bearbeitet:
Wie meinst du das? Ich dachte da an eine Art "serielle" Verbindung über RFCOMM, da OPP nicht so richtig zu klappen scheint...
OPP kommt auch über RFCOMM, aber dann müßtest Du Deine Server-App ja anders schreiben, als wenn die Dateien "direkt" uber RFCOMM kommen.
Wenn die Files gepushed werden, müßtest quasi ein eigenens OP Profil schreiben und das originale, was eben keine gpx Dateien annehmen möchte, igendwie abschalten. Und abschalten kann man es bestimmt nicht einfach so.
Oder eben in dem Verzeichnis nachgucken, wo die gepushten Sachen ankommen.

Du könntest, wie Du schon schreibst, die Dateien direkt über RFCOMM rüberschieben oder es über OBEX FTP machen oder aber auch von deinem Gerät, was die gpx Dateien hat, vielleicht auch abholen.


Zitat:
Zitat von Jask
Was meinst Du mit Überwachen?
Einfach nur gucken, welche Devices gepaired sind?


Jap, und zu schauen, ob da jetzt eine Datei ankommt, die entsprechendes Format hat.
Wenn ich da nicht komplett falsch liege, dann sagt das Pairing nichts über den Status einer Verbinug aus, sondern nur, ob die Geräte sich kennen!Da muß ja nicht anschließend automatisch eine Verbindung erfolgen.

Ich dachte urspünglich daran, mittels eines Broadcast Receivers ein "Obex Push"-Event oder so abzuhören, allerdings gibt es so etwas nicht (konnte mir Google und die API bestätigen).
Broadcast Receiver?
Ok, das fällt dann weg, aber vielleicht kannst du hier helfen? :)
https://www.android-hilfe.de/forum/...llen-ob-das-geraet-ein-connect-hat.31175.html

Mh, dann versuch ich noch einmal "von vorne" zu beginnen:
Hilfe :)

Nun wird irgendwann eine eben solche Datei gepusht, und das Handy soll diese quasi ohne sonstigen Eingriff vom Benutzer auf die SD-Karte speichern.
Ok, aber pushen geht ja scheinbar bei Dir nicht. Also eigenes OP Profil basteln und originales abschalten. Wird wohl wegfallen, oder? :)
Dann mit Obex FTP oder seriell.

Das Problem besteht im Wesentlichen darin, zu erkennen, wann eine Datei mit diesem Format ankommt.
Wenn sie mit Obex FTP kommen, sieht man es ja. Musst nur durch Deine App das Verzeichnis überwachen lassen, in dem die Dateien landen.

Wenn sie "direkt" über RFCOMM kommen, wüßte ich auch nicht wie man so was "anständig" macht, denn gpx werden sicher anders empfangen, als zb Biärdateiein?
Kann die Frage hier mal von jemandem geklärt werden?


Sobald ich das mit GPX oder sämtlichen anderen XML-Derivaten mache, wird weder irgendwas angenommen noch irgendwas oben in besagter Leiste angezeigt.
Ist ja echt unglaublich! Was die Androiden alles _nicht_ können... :-(
Welche Version hast Du drauf?

Um zumindest eine ähnliche Funktionalität zu haben, hatte ich diesen Gedanken mit dem Service, der permanent im Hintergrund läuft. Dieser Service soll schauen, ob das Handy gepairt ist und sobald eine Datei kommt schauen, ob Sie eine GPX-Datei ist und wenn ja, den Inputstream nehmen und in eine Datei umleiten.
So ungefähr scheint es am besten zu gehen. Und dafür gibt es ja ganz sicher Code-Beispiele?

Sag mal, wenn Du Deine gifs mit Obex Push auf Dein Android-Handy kopierst, mußt Du die Geräte aber doch nicht pairen oder? Ist nur eine Frage, die mich nebenbei interessiert.
 
Jask schrieb:
OPP kommt auch über RFCOMM, aber dann müßtest Du Deine Server-App ja anders schreiben, als wenn die Dateien "direkt" uber RFCOMM kommen.
Wenn die Files gepushed werden, müßtest quasi ein eigenens OP Profil schreiben und das originale, was eben keine gpx Dateien annehmen möchte, igendwie abschalten. Und abschalten kann man es bestimmt nicht einfach so
Vermute ich auch...allein schon, da man als App sogut wie gar nichts darf auf dem Handy...

Jask schrieb:
Oder eben in dem Verzeichnis nachgucken, wo die gepushten Sachen ankommen.
Jap, ein sehr guter Gedanke, mit Bildern klappt es bestimmt sehr gut, nur mit GPX eben nicht...:(

Jask schrieb:
Wenn sie mit Obex FTP kommen, sieht man es ja. Musst nur durch Deine App das Verzeichnis überwachen lassen, in dem die Dateien landen.
Könnte ein interessanter Gedanke sein...ich werde das mal im Hinterkopf behalten :)

Jask schrieb:
Ist ja echt unglaublich! Was die Androiden alles _nicht_ können... :-(
Welche Version hast Du drauf?
Die 2.2er auf dem Nexus, die sollte ansich alle Bluetoothgeschichten unterstützen.

Jask schrieb:
So ungefähr scheint es am besten zu gehen. Und dafür gibt es ja ganz sicher Code-Beispiele?
Bisher habe ich leider nur "fertige Apps" ohne Sourcecode gefunden :(

Jask schrieb:
Sag mal, wenn Du Deine gifs mit Obex Push auf Dein Android-Handy kopierst, mußt Du die Geräte aber doch nicht pairen oder? Ist nur eine Frage, die mich nebenbei interessiert.
Von vorneherein nicht, allerdings steht NACH der Übertragung "Gepairt, aber nicht verbunden" als BT-Status

Zu deinem Link von oben: Die Überprüfung, ob etwas connected ist oder nicht, funktioniert mittels callback-Methoden und klappt bereits hervorragend ;-) (Ich werde es mal dem Threadersteller mitteilen).
 
Bisher habe ich leider nur "fertige Apps" ohne Sourcecode gefunden
Kann man die nicht decompilieren und mal reingucken?
Ansonsten muß es ja nicht unbedingt Android-Java sein. Vielleicht kommt man ja auch mit ein bisschen JSE-Code schon weiter. Ich habe zwar auf die Schnelle auch noch nichts gefunden, sollte aber genug zu finden sein. Wenn die Zeit ist, gucke ich auch noch mal.
Das dürfte aber echt keine große Sache sein, unbekannte Dateien unbekannten Typs zu empfangen, um sie anschließend zu identifizieren..
Mich wundert nur ein bisschen, dass Du Dir die Art zu Senden aussuchen kannst, aber dann Probleme mit der Dateiidentifizierung, falls sie über RFCOMM kommen. Die Methode muss doch bestimmt auch erst mal gebastelt werden, oder nicht?
Wenn Du über RFCOMM sendest, kannst Du vielleicht also auch beeinflussen, wie?
Dann könntest Du in den Streams einfach reinschreiben, was für eine Datei kommt, und sogar welche Größe usw. , aber die Möglichkeit besteht wohl nicht?
 
Jask schrieb:
Kann man die nicht decompilieren und mal reingucken?
Ich fürchte nicht, da das ja 2 mal kompiliert wird...


Irgendwelche anderen Vorschläge?
 

Ähnliche Themen

S
Antworten
4
Aufrufe
4.426
mblaster4711
mblaster4711
N
Antworten
8
Aufrufe
1.017
NerkJ
N
M
Antworten
11
Aufrufe
2.268
jogimuc
J
Zurück
Oben Unten