gpt4 book ai didi

android - 如何以编程方式将 GPS 位置发送到 Android Studio 2.0 AVD

转载 作者:行者123 更新时间:2023-11-29 19:46:03 25 4
gpt4 key购买 nike

我有一个用 Android Studio 2.1.1 创建的 x86 API23 AVD(带有 Google API),我需要将 GPS 坐标发送到它。我已经广泛阅读了有关使用命令行中的“adb emu geo fix”命令或通过 telnet 执行此操作的内容——在身份验证之后,然后在命令中发送 geo fix 命令以及纬度、经度和可选的高度参数行也是如此。

我在 Mac OSX El Capitan 机器上运行我的代码。

问题是我的应用程序——需要输入我发送的 GPS 坐标的应用程序,就好像它没有获取任何数据一样。

如果我使用 AVD 本身的扩展控件通过“发送”按钮发送相同的当前位置,或者播放从 .gpx 文件加载的路线数据,则一切正常。该应用程序获取 GPS 数据并按预期运行。

问题是我正在运行需要启动 AVD 的测试自动化(Appium、Java、TestNG),然后发送 GPS 数据,然后验证我的被测应用程序在输入正确的 GPS 时是否按预期运行数据。

这意味着我无法手动与 AVD 的扩展手动控件进行交互。

我必须以编程方式完成这一切。

这是我现在通过 Telnet 命令所做的事情。代码看起来基本上就像发送“当前位置”一样:

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

static TelnetClient tc = null;

public InputStream inptStream;
public PrintStream outptStream;
public String prompt = "OK";

//Instantiate the telnet client -- we use this to send geo fix commands to the emulator
tc = new TelnetClient();

//Connect, this will generate the auth_token if it does not already exist in file system
System.out.println("Trying to connect to AVD...");
tc.connect("localhost", 5554);

//Check to see if we are connected
Boolean areWeConn = tc.isConnected();
System.out.println("Are we connected?" + areWeConn);

// Get input and output stream references
System.out.println("Getting input and output streams...");
inptStream = tc.getInputStream();
outptStream = new PrintStream(tc.getOutputStream());

//wait for OK prompt
System.out.println("Waiting for the OK prompt...");
//Not including readUntil() code because it's just reading terminal output
readUntil(prompt);

//Send the auth token number
System.out.println("Sending auth token...");
outptStream.println("auth " + "3A/Yfazi3pRcvNiB");
outptStream.flush();

//wait for OK prompt
System.out.println("Waiting for the OK prompt...");
readUntil(prompt);

//Send current location for our Starting Point
System.out.println("Sending Current Location - Starting Point");
outptStream.println("geo" + "fix" + "28.4194 -81.5812");
outptStream.flush();

//Now disconnect from Telnet
System.out.println("Disconnecting from AVD...");
tc.disconnect();

//Check to see if we are still connected
Boolean stillConn = tc.isConnected();
System.out.println("Are we still connected? " + stillConn);

当上面的代码未能在我的应用程序中触发预期的行为时,即使它看起来没有任何错误,我使用一个终端来启动 AVD 并在其上运行我的应用程序,然后使用另一个终端来在 Telnet OK 提示符下使用以下命令(身份验证后)手动发送“当前位置”:

telnet localhost 5554

等待确定...

然后通过发送身份验证 token 手动进行身份验证...

等待OK,然后发送:

geo fix "28.4194 -81.5812"

此命令在提示符下似乎运行良好(没有错误),但我的应用显然没有获得任何 GPS 信息。

因此,我尝试使用上述命令的 adb 版本,其工作方式如下:

adb emu geo fix "28.4194 -81.5812"

但这也没有奏效。

同样,使用 Appium 自己的 Android 驱动程序,我尝试了以下操作(当然是在创建驱动程序之后):

Location currLocation = new Location(28.41936, -81.5812, 0.0);

//Set Current Location for
myDriver.setLocation(currLocation);

但驱动程序似乎“挂”在这里。我无法获得调试输出。它只是......阻塞,直到事情最终超时。

而且,我也使用 Google map 移动应用尝试了上述所有操作,但它也无法对我发送的当前位置坐标使用react。

所以,我卡住了!

有没有人真的有幸在使用 Android Studio 2+ 创建的 API23 AVD 上以编程方式向其正在测试的应用程序发送“geo fix”命令?

Android Studio 2.0 之前的版本创建的 AVD 不能用于我的目的。

对于我做错了什么或可能的解决方法的任何反馈都将不胜感激!

谢谢,

沃尔夫

最佳答案

所以,信不信由你,首先发送经度,然后发送纬度,如下所示:

geo fix "-81.5812 28.4194"

geo fix 命令对我有用!

因此,更正后的代码如下所示:

//Send current location for our Starting Point
System.out.println("Sending Current Location - Starting Point");
outptStream.println("geo fix -81.5812 28.4194");
outptStream.flush();

呃...几天时间才能弄清楚,兄弟。天...

我无法在我的代码中使用“adb emu geo fix”命令,所以我使用上面的直接“geo fix”命令,这非常适合设置“当前位置”。

但是,“geo fix”命令似乎无法为我创建我的应用绘制到 map 的路线。我有一个简单的坐标数组——所有坐标现在都已更正以提供经度和纬度,我循环播放它们——但这无法为我提供在我的应用程序中遵循的路线。

关于 Android Studio 2.0 中的扩展控件如何将 .gpx 坐标发送到模拟器,以便应用程序将此信息流读取为路径而不是一个一个地标记的单个当前位置,有什么想法吗?

我希望这是有道理的。

****2016 年 6 月 20 日更新 ****

所以,上述问题的前提是错误的。在发布上述关于发送“路线”而不是“当前位置”的查询后不久,我发现使用“geo fix”命令一个一个发送的一系列位置确实适用于我的应用程序,并且一条路线显示在我的应用程序上 map 就好了!我犯了两个大错误。首先,我将整个阵列一次发送到我的循环,而不是一次发送一个位置命令。第二,在发送下一个“geo fix”命令之前,我的代码没有在发送每个“geo fix”命令后等待 Telnet session 中返回“OK”提示。一旦我纠正了这些问题,事情就开始完美运行了!

关于android - 如何以编程方式将 GPS 位置发送到 Android Studio 2.0 AVD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37669026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com