- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个用 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/
我最近在/ drawable中添加了一些.gifs,以便可以将它们与按钮一起使用。这个工作正常(没有错误)。现在,当我重建/运行我的应用程序时,出现以下错误: Error: Gradle: Execu
Android 中有返回内部存储数据路径的方法吗? 我有 2 部 Android 智能手机(Samsung s2 和 s7 edge),我在其中安装了一个应用程序。我想使用位于这条路径中的 sqlit
这个问题在这里已经有了答案: What's the difference between "?android:" and "@android:" in an android layout xml f
我只想知道 android 开发手机、android 普通手机和 android root 手机之间的实际区别。 我们不能从实体店或除 android marketplace 以外的其他地方购买开发手
自Gradle更新以来,我正在努力使这个项目达到标准。这是一个团队项目,它使用的是android-apt插件。我已经进行了必要的语法更改(编译->实现和apt->注释处理器),但是编译器仍在告诉我存在
我是android和kotlin的新手,所以请原谅要解决的一个非常简单的问题! 我已经使用导航体系结构组件创建了一个基本应用程序,使用了底部的导航栏和三个导航选项。每个导航选项都指向一个专用片段,该片
我目前正在使用 Facebook official SDK for Android . 我现在正在使用高级示例应用程序,但我不知道如何让它获取应用程序墙/流/状态而不是登录的用户。 这可能吗?在那种情
我在下载文件时遇到问题, 我可以在模拟器中下载文件,但无法在手机上使用。我已经定义了上网和写入 SD 卡的权限。 我在服务器上有一个 doc 文件,如果用户单击下载。它下载文件。这在模拟器中工作正常但
这个问题在这里已经有了答案: What is the difference between gravity and layout_gravity in Android? (22 个答案) 关闭 9
任何人都可以告诉我什么是 android 缓存和应用程序缓存,因为当我们谈论缓存清理应用程序时,它的作用是,缓存清理概念是清理应用程序缓存还是像内存管理一样主存储、RAM、缓存是不同的并且据我所知,缓
假设应用程序 Foo 和 Eggs 在同一台 Android 设备上。任一应用程序都可以获取设备上所有应用程序的列表。一个应用程序是否有可能知道另一个应用程序是否已经运行以及运行了多长时间? 最佳答案
我有点困惑,我只看到了从 android 到 pc 或者从 android 到 pc 的例子。我需要制作一个从两部手机 (android) 连接的 android 应用程序进行视频聊天。我在想,我知道
用于使用 Android 以编程方式锁定屏幕。我从 Stackoverflow 之前关于此的问题中得到了一些好主意,并且我做得很好,但是当我运行该代码时,没有异常和错误。而且,屏幕没有锁定。请在这段代
文档说: android:layout_alignParentStart If true, makes the start edge of this view match the start edge
我不知道这两个属性和高度之间的区别。 以一个TextView为例,如果我将它的layout_width设置为wrap_content,并将它的width设置为50 dip,会发生什么情况? 最佳答案
这两个属性有什么关系?如果我有 android:noHistory="true",那么有 android:finishOnTaskLaunch="true" 有什么意义吗? 最佳答案 假设您的应用中有
我是新手,正在尝试理解以下 XML 代码: 查看 developer.android.com 上的文档,它说“starStyle”是 R.attr 中的常量, public static final
在下面的代码中,为什么当我设置时单选按钮的外观会发生变化 android:layout_width="fill_parent" 和 android:width="fill_parent" 我说的是
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
假设我有一个函数 fun myFunction(name:String, email:String){},当我调用这个函数时 myFunction('Ali', 'ali@test.com ') 如何
我是一名优秀的程序员,十分优秀!