GPS Daten per TCP/IP versenden.

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • GPS Daten per TCP/IP versenden.

    Hallo,
    ich bin noch ziemlich Android-unerfahren und grüble schon seit vielen Tagen über ein Problem.
    Ich bin nicht sicher, ob das mit meinem Konzept überhaupt machbar ist, und benötige dringend eure Hilfe:

    Ich möchte eine App schreiben, die zyklisch die Position des Handys per Fused Location Provider Client abfragt.
    Wenn ich in die Nähe meiner Heimatkoordinaten komme, soll per TCP/IP ein Kommando an meinen Server zuhause gesendet werden.

    Zunächst habe ich zum Test 2 getrennte Apps verwendet:
    1. Senden von beliebigen TCP/IP Daten an meinen Server zuhause.
    Die Main Activity erzeugt einfach einen Thread, übergibt im Konstruktor des Threads die Sendedaten, und der Thread beendet sich einfach wieder selbst,
    wenn er das Kommando verschickt hat.
    Das funktioniert soweit.

    2. Zyklisches feststellen der Position.
    Da das auch dann funktionieren soll, wenn die App im Hintergrund oder gar beendet worden ist, stoße ich in der App einfach zyklische Location Updates an,
    und diese landen in der onReceive-Methode eines Broadcast-Receivers.
    Das funktioniert auch (auch wenn die App beendet wurde ).

    Jetzt mein Problem:
    Wenn ich versuche, beide Apps zu einer zusammenzufügen, (den funktionierenden TCP/IP-Thread aus der ersten App
    in die zweite einbauen) stürzt meine App ab.

    Meine Frage:
    Geht das überhaupt, aus der onReceive-Methode eines Broadcast-Receivers TCP-IP Daten übers Netzwerk zu schicken?
    Wenn ja, muss man da was Spezielles beachten?

    Ich habe mal den Code des TCT/IP Threads hinzugefügt.
    Diesen Thread erzeuge und starte ich aus der onReceive-Methode des Broadcast Receivers
    Kommentiert man alles aus, was direkt mit dem Netzwerk zu tun hat, läuft die App.
    Sobald ich einen Socket erstelle beendet sich die App.

    Quellcode

    1. public class NetworkThread implements Runnable
    2. {
    3. public static final String SERVER_HOST = "Meinhost.de"; // server Hostname
    4. public static final int SERVER_PORT = Meinport; // server Port
    5. private Socket clientSocket;
    6. private PrintWriter out;
    7. private String strToSend;
    8. public NetworkThread( String strParam )
    9. {
    10. // sendestring im konstruktor merken
    11. strToSend = strParam;
    12. }
    13. @Override
    14. public void run()
    15. {
    16. // dieser beep kommt noch
    17. ToneGenerator toneGen = new ToneGenerator(AudioManager.STREAM_ALARM, 100);
    18. toneGen.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 400);
    19. // UND DER FOLGENDE TEIL BEENDET DIE APP (crash)
    20. try
    21. {
    22. clientSocket = new Socket(SERVER_HOST, SERVER_PORT);
    23. out = new PrintWriter(clientSocket.getOutputStream(),true);
    24. out.println(strToSend);
    25. clientSocket.close();
    26. }
    27. catch(IOException e)
    28. {
    29. System.out.println("Unknown host:");
    30. }
    31. }
    32. }
    Alles anzeigen
  • Hallo

    Also ich würde sagen deine Host Adresse ist falsch. Die wird nicht aufgelöst.
    Teste es im Browser.

    Benutze mal die IP Adresse .zb 104.31.67.161


    Oder benutze den richtigen String der auch aufgelöst werden kann.


    public static final String SERVER_HOST = "Meinhost.de";
    ist falsch

    public static final String SERVER_HOST = www.mine-host.de;
    sollte es wohl heißen.
    Ein Feedback auf Tipps ist auch schön. :P
  • Danke für die Antworten, hab's selber gefunden ( PEINLICH !!! ).
    Beim Zusammenkopieren aus beiden Projekten habe ich versehentlich die Internet-Permission
    in der falschen Manifest-Datei editiert.

    Jetzt habe ich nur noch das Problem, das die Anwendung abstürzt, wenn ich die Location Updates
    deaktiviere ( removeLocationUpdates(getPendingIntent() )

    Zum Thema "selber programmieren lohnt nicht": Lohnt doch. Wenn man was lernen will !