在安卓设备上测试GPS

3

在模拟器中测试GPS的方法是什么?

我知道如何发送单个坐标,我也看到了加载GPX或KML文件的可能性(实际上没有尝试过),但我的意思是,有一个组件可以周期性地发送坐标,以模拟正常人类运动,这将非常好 :)

也许有编程的可能性吗?

非常感谢任何建议或链接。

Mur

2个回答

2

我写了一个简单的Java控制台应用程序,实现了一个telnet客户端,并从一个坐标文件中读取数据。虽然代码不是很美观,但它能够正常工作:

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();
      }
   }
}

“esk.txt”文件的格式如下:
-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


非常感谢。这正是我所需要的 :) 我重新编写了您的类,以便不从文件中读取坐标,而是通过程序生成它们 :) - Tima

1

您可以通过 telnet 连接到您的模拟器,例如:

telnet localhost 5554

然后输入

geo fix <longitude> <latitude> 

你也可以提供NMEA句子,例如:

geo nmea <sentence>

也许不是自动的,但仍足以在您的模拟器中测试 GPS。


谢谢您的回答。我真的需要定期自动发送GPS坐标的某些东西。我也尝试过Telnet和Geo,但那不是我要找的。 - Tima
似乎没有这样的工具。也许一个简单的方法是编写一个telnet会话脚本?在这里讨论https://dev59.com/eknSa4cB1Zd3GeqPPI8G - Fredrik Widerberg
听起来更好。我会尝试看看是否也可以不用Python实现。 - Tima

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接