1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Bluetooth - RFCOMM - Dateitransfer

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von poeschi, 14.06.2010.

  1. poeschi, 14.06.2010 #1
    poeschi

    poeschi Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    3
    Registriert seit:
    14.06.2010
    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
     
  2. Jask, 14.06.2010 #2
    Jask

    Jask Android-Hilfe.de Mitglied

    Beiträge:
    65
    Erhaltene Danke:
    1
    Registriert seit:
    12.06.2010
    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.

    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.

    Was meinst Du mit Überwachen?
    Einfach nur gucken, welche Devices gepaired sind?
    Mit
    geht da vielleicht was.

    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? :)

    Vielleicht versuchst Du mal, Dein Problem noch genauer zu beschreiben. Eventuell kann Dir dann hier auch besser geholfen werden.
     
  3. poeschi, 14.06.2010 #3
    poeschi

    poeschi Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    3
    Registriert seit:
    14.06.2010
    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:

    Ja, und Ja. Die Gegenstelle existiert bereits, ich möchte "nur" ein "Server(!?)-App", dass die Dateien annimmt.

    Wie meinst du das? Ich dachte da an eine Art "serielle" Verbindung über RFCOMM, da OPP nicht so richtig zu klappen scheint...

    Jap, und zu schauen, ob da jetzt eine Datei ankommt, die entsprechendes Format hat.

    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...

    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: 14.06.2010
  4. Jask, 14.06.2010 #4
    Jask

    Jask Android-Hilfe.de Mitglied

    Beiträge:
    65
    Erhaltene Danke:
    1
    Registriert seit:
    12.06.2010
    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.


    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.

    Broadcast Receiver?
    Ok, das fällt dann weg, aber vielleicht kannst du hier helfen? :)
    http://www.android-hilfe.de/android...eststellen-ob-das-geraet-ein-connect-hat.html

    Hilfe :)

    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.

    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?


    Ist ja echt unglaublich! Was die Androiden alles _nicht_ können... :-(
    Welche Version hast Du drauf?

    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.
     
  5. poeschi, 15.06.2010 #5
    poeschi

    poeschi Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    3
    Registriert seit:
    14.06.2010
    Vermute ich auch...allein schon, da man als App sogut wie gar nichts darf auf dem Handy...

    Jap, ein sehr guter Gedanke, mit Bildern klappt es bestimmt sehr gut, nur mit GPX eben nicht...:(

    Könnte ein interessanter Gedanke sein...ich werde das mal im Hinterkopf behalten :)

    Die 2.2er auf dem Nexus, die sollte ansich alle Bluetoothgeschichten unterstützen.

    Bisher habe ich leider nur "fertige Apps" ohne Sourcecode gefunden :(

    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).
     
  6. Jask, 15.06.2010 #6
    Jask

    Jask Android-Hilfe.de Mitglied

    Beiträge:
    65
    Erhaltene Danke:
    1
    Registriert seit:
    12.06.2010
    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?
     
  7. poeschi, 21.06.2010 #7
    poeschi

    poeschi Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    3
    Registriert seit:
    14.06.2010
    Ich fürchte nicht, da das ja 2 mal kompiliert wird...


    Irgendwelche anderen Vorschläge?
     
  8. Jask, 21.06.2010 #8
    Jask

    Jask Android-Hilfe.de Mitglied

    Beiträge:
    65
    Erhaltene Danke:
    1
    Registriert seit:
    12.06.2010
    Da sind noch ein paar Sachen unklar...
     

Diese Seite empfehlen