2011-01-20 7 views
3

Est-ce un moyen de tester le GPS dans l'émulateur?Test GPS dans Android

Je sais comment envoyer une seule coordonnée, j'ai vu aussi la possibilité de charger des fichiers KML GPX ou (je ne l'ai pas vraiment essayé), mais ce que je veux dire, ce serait bien d'avoir un composant, ce qui envoyer des coordonnées émulant périodiquement mouvement humain normal :)

Peut-être qu'il y a des possibilités de le faire par programme?

Merci beaucoup pour tout conseil ou lien.

Mur

Répondre

1

J'ai écrit une application de console java rugueuse et prête pour implémenter un client telnet et lire à partir d'un fichier de coordonnées. Ce n'est pas le code plus jolie, mais il fonctionne:

import org.apache.commons.net.telnet.TelnetClient; 

import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.PrintStream; 
import java.text.DecimalFormat; 
import java.text.NumberFormat; 

public class AutomatedTelnetClient { 
    private TelnetClient telnet = new TelnetClient(); 
    private InputStream in; 
    private PrintStream out; 
    private String prompt = "#"; 

    public AutomatedTelnetClient(String server, String user, String password) { 
     try { 
     // Connect to the specified server 
     telnet.connect("127.0.0.1", 5554); 
     // Get input and output stream references 
     in = telnet.getInputStream(); 
     out = new PrintStream(telnet.getOutputStream()); 

     readUntil("OK"); 
     sendGeoFixes("c:\\junk\\esk.txt"); 
     System.out.println("Finished"); 
     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
    } 

    private void delay() { 
     long t = System.currentTimeMillis(); 
     long finish = t + 15000; 
     boolean loop = true; 
     while (loop) { 
     t = System.currentTimeMillis(); 
     if (t > finish) 
      loop = false; 
     } 
    } 

    private void sendGeoFixes(String fn) { 
     boolean loop = true; 
     String line; 
     BufferedReader br = null; 
     String lat, lon; 

     String formatStr = "000.000000"; 
     NumberFormat formatter = new DecimalFormat(formatStr); 
     String gf = "geo fix "; 
     try { 
     br = new BufferedReader(new FileReader(fn)); 
     do { 
      try { 
       line = br.readLine(); 
       if (line == null) 
        break; 
       String sa[] = line.split(","); 
       if (sa.length < 2) 
        break; 
       lat = sa[0]; 
       String slat = formatter.format(Float.parseFloat(lat)); 
       lon = sa[1]; 
       String slon = formatter.format(Float.parseFloat(lon)); 
       String sFix = slat + " " + slon; 
       write(gf + sFix); 
       String ans = readUntil("OK"); 
       System.out.println(ans); 
       delay(); 
     } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } while (loop); 
     } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 
    } 

    public String readUntil(String pattern) { 
     try { 
     char lastChar = pattern.charAt(pattern.length() - 1); 
     StringBuffer sb = new StringBuffer(); 
     char ch = (char) in.read(); 
     while (true) { 
      System.out.print(ch); 
      sb.append(ch); 
      if (ch == lastChar) { 
       if (sb.toString().endsWith(pattern)) { 
        return sb.toString(); 
       } 
      } 
      ch = (char) in.read(); 
     } 
     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
     return null; 
    } 

    public void write(String value) { 
     try { 
     out.println(value); 
     out.flush(); 
     System.out.println(value); 
     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
    } 


    public static void main(String[] args) { 
     try { 
     AutomatedTelnetClient telnet = new AutomatedTelnetClient(
       "127.0.0.1", "username", "password"); 
     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
    } 
} 

Le fichier "esk.txt" a le format suivant:

-1.059408,54.476764 
-1.056685,54.477731 
-1.048233,54.479462 
-1.044054,54.479968 
-1.038213,54.482259 
-1.034194,54.482496 
-1.027904,54.480873 
-1.01868,54.479361 
-1.017364,54.47953 

etc

+0

MERCI BEAUCOUP. C'est exactement ce dont j'avais besoin :) Je vous réécris classe, de sorte que je ne lis pas les coordonnées du fichier, mais les génère par programme :) – Tima

1

Vous pouvez vous connecter à votre émulateur via telnet comme

telnet localhost 5554 

puis tapez

geo fix <longitude> <latitude> 

vous pouvez également provie phrases NMEA comme

geo nmea <sentence> 

perhap s pas automatiquement, mais c'est toujours suffisant pour tester le gps dans votre émulateur.

+0

Merci pour la réponse. J'ai vraiment besoin de quelque chose qui envoie des coordonnées GPS de façon péridocale et automatique. J'ai aussi essayé telnet et geo, mais ce n'est pas ce que je cherche. – Tima

+0

Il ne semble pas y avoir un tel outil. Peut-être un moyen simple serait de scripter une session Telnet? Discuté ici http://stackoverflow.com/questions/1491494/telnet-automation-scripting –

+0

Cela sonne mieux. J'essaie de voir, si c'est aussi possible de faire sans python. – Tima