首页 文章

如何在Android模拟器中模拟GPS位置?

提问于
浏览
402

我希望在Android模拟器中获得经度和纬度以进行测试 .

任何人都可以指导我如何实现这一目标吗?

如何将仿真器的位置设置为测试位置?

30 回答

  • 40

    当模拟器在没有Google API的情况下运行Android映像时,我无法在模拟器上获得GPS修复 . 我一改变图像以包含Google API,所有这里提到的方法来获得GPS修复工作 .

    确保在创建AVD时使用Google API选择图像 .

  • 4

    您可以使用像genymotion这样的模拟器,它可以灵活地模拟您当前的GPS位置等 .

  • 0

    如果您正在使用 Eclipse ,请转到 Window->Open Perspective->DDMS ,然后在 Location Controls 中键入一个并按 Send .

  • 105

    对于新的模拟器:

    http://developer.android.com/tools/devices/emulator.html#extended

    基本上,单击模拟器控件中的三个点按钮(模拟器右侧),它将打开一个菜单,允许您控制模拟器,包括位置

  • 1

    如果上述解决方案不起作用 . 试试这个:

    在你的Android Manifest.xml里面,添加以下两个应用程序标签的链接 OUTSIDE ,但当然在你的清单标签里面

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission>
    <uses-permission android:name="android.permission.INTERNET" ></uses-permission>
    
  • 4

    对于我自己的项目,我开发了一个在线服务,可以为Android模拟器提供模拟位置 .

    它使用geo nmea而不是geo fix,除了lat / lon之外,还可以设置速度,航向,精确时间等 .

    该服务需要nc(netcat)命令行实用程序,而不需要其他任何操作 .

    http://www.kisstech.ch/nmea/

  • 13

    1. Android Studio users.

    运行模拟器后转到Tools-> Android-> Android设备监视器

    单击位置控件组中的“模拟器控制选项卡”更改 .

    2. Eclipse users.

    Eclipse In Eclipse In Menu选择“Window”,然后选择“Open Perspective”,然后选择“DDMS” . 即Window-> Open Prespective-> DDMS .

    您将在左侧设备面板和右侧看到您将看到不同的选项卡 . 选择“仿真器控制”选项卡 .

    在底部,您将看到位置控制面板 . 选择“手动”选项卡 .

    在文本框中输入经度和纬度,然后单击发送按钮 . 它会将位置发送给您的模拟器和应用程序 .

    3. Using telnet.

    在run命令中输入this .

    telnet localhost 5554
    

    如果您不使用Windows,则可以使用任何telnet客户端 .

    使用telnet连接后,使用以下命令将您的位置发送到模拟器 .

    geo fix long lat    
    geo fix -121.45356 46.51119 4392
    

    4. Use the browser based Google maps tool

    有一个程序使用GWT和Google Maps API启动基于浏览器的 Map 工具来设置模拟器中的GPS位置:

    android-gps-emulator

  • 32

    我试图通过adb为多点设置地理位置修复,无法让我的应用看到任何GPS数据 . 但是当我尝试打开DDMS时,选择我的应用程序的进程并通过模拟器控制选项卡发送坐标,它就可以立即运行 .

  • 12

    Dalvik Debug Monitor>选择仿真器>仿真器控制选项卡>位置控件 .

    DDMS - android_sdk / tools / ddms或android_sdk / tools / monitor

  • 8

    这里没有人提到模拟器本身的内置解决方案,因此对于未来的访问者,我想与视觉分享 .

    首先,运行Android Emulator并单击下面显示的菜单按钮(3个点):

    emulator with menu button

    然后从左侧窗格中选择 Location 并根据需要更改坐标 . 按 Send 按钮后,更改将立即生效(我建议您打开谷歌 Map 以便更好地理解) .

    enter image description here

    Android Studio Version: 2.3.3

  • 1

    以下解决方案对我有用 - 打开命令行并写入:

    adb emu geo fix [longtitude] [latitude]
    
  • 0

    在Linux中,通信端口被阻止 . 将终端导航到 android sdk 中的platform-tools文件夹并触发此命令:

    ./adb -s #{device_name} emu geo fix #{longitude} #{latitude}
    
  • 5

    在模拟器控制台中使用“geo”命令

    要从命令行发送模拟位置数据:

    • 在Android模拟器中启动应用程序,并在SDK的/ tools目录中打开终端/控制台 .

    • 连接到模拟器控制台:

    telnet localhost 5555 (用运行模拟器的任何端口替换5555)

    • 发送位置数据:* geo fix以发送固定的地理位置 .

    此命令接受十进制度的经度和纬度,以及以米为单位的可选高度 . 例如:

    geo fix -121.45356 46.51119 4392
    
  • 1

    在Mac,Linux或Cygwin中:

    echo 'geo fix -99.133333 19.43333 2202' | nc localhost 5554
    

    这将把你带到墨西哥城 . 相应地更改您的经度/纬度/高度 . 如果你对nmea不感兴趣,那就足够了 .

  • 5

    无法发表评论,所以更新@ectomorphs会在这里回答,现在telneting需要有一个身份验证令牌 . 在linux下,在/home/username/.emulator_console_auth_token下

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import sys
    import telnetlib
    from time import sleep
    import random
    
    FILE = open('/home/username/.emulator_console_auth_token', 'r')
    AUTH_TOKEN = FILE.read()
    FILE.close()
    
    HOST = "127.0.0.1"
    PORT = 5554
    TIMEOUT = 10
    LAT_SRC = 52.5243700
    LNG_SRC = 13.4105300
    LAT_DST = 53.5753200
    LNG_DST = 10.0153400
    SECONDS = 120
    
    LAT_MAX_STEP = ((max(LAT_DST, LAT_SRC) - min(LAT_DST, LAT_SRC)) / SECONDS) * 2
    LNG_MAX_STEP = ((max(LNG_DST, LNG_SRC) - min(LNG_DST, LNG_SRC)) / SECONDS) * 2
    
    DIRECTION_LAT = 1 if LAT_DST - LAT_SRC > 0 else -1
    DIRECTION_LNG = 1 if LNG_DST - LNG_SRC > 0 else -1
    
    lat = LAT_SRC
    lng = LNG_SRC
    
    tn = telnetlib.Telnet(HOST, PORT, TIMEOUT)
    tn.set_debuglevel(9)
    tn.read_until("OK", 5)
    
    tn.write("auth {0}\n".format(AUTH_TOKEN))
    tn.read_until("OK", 5)
    
    tn.read_until("OK", 5)
    
    tn.write("geo fix {0} {1}\n".format(LNG_SRC, LAT_SRC))
    #tn.write("exit\n")
    
    for i in range(SECONDS):
        lat += round(random.uniform(0, LAT_MAX_STEP), 7) * DIRECTION_LAT
        lng += round(random.uniform(0, LNG_MAX_STEP), 7) * DIRECTION_LNG
    
        #tn.read_until("OK", 5)
        tn.write("geo fix {0} {1}\n".format(lng, lat))
        #tn.write("exit\n")
        sleep(1)
    
    tn.write("geo fix {0} {1}\n".format(LNG_DST, LAT_DST))
    tn.write("exit\n")
    
    print tn.read_all()
    

    从shell脚本可以像这样设置coorinate

    #!/usr/bin/env bash
    export ATOKEN=`cat ~/.emulator_console_auth_token`
    echo -ne "auth $ATOKEN\ngeo fix -99.133333 19.43333 2202\n"  | nc localhost 5554
    
  • 3

    假设您已经设置并运行了mapview:

    MapView mapView = (MapView) findViewById(R.id.mapview);
    final MyLocationOverlay myLocation = new MyLocationOverlay(this, mapView);
    
    mapView.getOverlays().add(myLocation);
    myLocation.enableMyLocation();
    
    myLocation.runOnFirstFix(new Runnable() {
        public void run() {
            GeoPoint pt = myLocation.getMyLocation();
        }
    });
    

    您需要在清单中获得以下权限:

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    

    要从Eclipse向模拟器发送模拟坐标,请转到“窗口”菜单,选择“显示视图”>“其他”>“模拟器控件”,然后您可以从出现的模拟器控制面板发送坐标 .

  • 3

    已经提到的多次使用shell命令“ geo fix... ”的答案是正确的答案 . 但是如果你使用 LocationClient.getLastLocation() 来检索你的数据,那么值得一提的是它起初不起作用 . LocationClient类使用Google Play服务来检索坐标 . 对我来说,这是在运行模拟器 Map 应用程序之后开始工作的 . 在第一次启动时,系统会要求您允许Google应用访问您的位置,我想这就是诀窍 .

  • 10

    首先进入日食中的DDMS部分比打开模拟器控制....转到手动部分设置lat和long然后按发送按钮

  • 2

    Android Studio有一个名为“Mock Location Plugin”的插件 . 您可以使用此插件模拟多个点 . 您可以在此链接中找到详细的使用手册:Android Studio. Simulate multiple GPS points with Mock Location Plugin

  • 80

    我用eclipse插件DDMS功能发送GPS .
    enter image description here

  • 0

    如果您正在使用eclipse,那么使用Emulator控制器,您可以手动设置纬度和经度,并在模拟器中运行基于 Map 的应用程序

  • 1

    您可以通过Telnet连接到仿真器 . 然后,您有一个模拟器控制台,可以输入某些数据,如地理定位,网络等 .

    怎么用控制台被广泛解释here . 要连接到控制台,请打开命令行并键入

    telnet localhost 5554
    

    然后,您可以使用geo命令在使用gps位置提供程序传递给所有程序的设备上设置纬度,经度和所需高度 . 有关详细说明,请参阅上面的链接 .

    在控制台中运行的特定命令是

    geo fix <longitude value> <latitude value>
    

    我发现这个网站对于找到一个真实的lat / lng非常有用:http://itouchmap.com/latlong.html

    如果您需要多个坐标,则可以使用带有路径的kml文件,这在article中有一点描述 . 我目前找不到更好的消息来源 .

  • 2

    Obtaining User Location

    看看Providing Mock Location Data . 你会找到它的解决方案 .

  • 13

    我写了一个python脚本,通过telnet将gps位置推送到模拟器 . 它定义了源和目标位置 . 还有一个时间偏移,可让您控制将坐标推送到设备的时间长度 . 一个位置每秒推动一次 .

    在下面的示例中,脚本在120秒内从柏林移动到汉堡 . 每秒一步/ gps位置随机距离 .

    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    import sys
    import telnetlib
    from time import sleep
    import random
    
    HOST = "127.0.0.1"
    PORT = 5554
    TIMEOUT = 10
    LAT_SRC = 52.5243700
    LNG_SRC = 13.4105300
    LAT_DST = 53.5753200
    LNG_DST = 10.0153400
    SECONDS = 120
    
    LAT_MAX_STEP = ((max(LAT_DST, LAT_SRC) - min(LAT_DST, LAT_SRC)) / SECONDS) * 2
    LNG_MAX_STEP = ((max(LNG_DST, LNG_SRC) - min(LNG_DST, LNG_SRC)) / SECONDS) * 2
    
    DIRECTION_LAT = 1 if LAT_DST - LAT_SRC > 0 else -1
    DIRECTION_LNG = 1 if LNG_DST - LNG_SRC > 0 else -1
    
    lat = LAT_SRC
    lng = LNG_SRC
    
    tn = telnetlib.Telnet(HOST, PORT, TIMEOUT)
    tn.set_debuglevel(9)
    tn.read_until("OK", 5)
    
    tn.write("geo fix {0} {1}\n".format(LNG_SRC, LAT_SRC))
    #tn.write("exit\n")
    
    for i in range(SECONDS):
        lat += round(random.uniform(0, LAT_MAX_STEP), 7) * DIRECTION_LAT
        lng += round(random.uniform(0, LNG_MAX_STEP), 7) * DIRECTION_LNG
    
        #tn.read_until("OK", 5)
        tn.write("geo fix {0} {1}\n".format(lng, lat))
        #tn.write("exit\n")
        sleep(1)
    
    tn.write("geo fix {0} {1}\n".format(LNG_DST, LAT_DST))
    tn.write("exit\n")
    
    print tn.read_all()
    
  • 419

    我正在寻找一种更好的方法来设置模拟器的GPS坐标,而不是使用 geo fix 并手动确定特定的纬度和经度坐标 .

    无法找到任何内容,我整理了一个使用GWT和Google Maps API的小程序来启动基于浏览器的 Map 工具来设置模拟器中的GPS位置:

    android-gps-emulator

    希望它可以用来帮助那些毫无疑问会遇到这个难题/问题的人 .

    android-gps-emulator

  • 5

    如果您使用的是Android Studio(1.3):

    • 点击菜单"Tools"

    • "Android"

    • "Android device monitor"

    • 点击你当前的模拟器

    • Tab "Emulator Control"

    • 转到"Location Controls"并输入Lat和Lon

  • 1

    将Alberto Gaona的答案分成一行

    token=$(cat ~/.emulator_console_auth_token); cat <(echo -e "auth $token \n  geo fix 96.0290791 16.9041016  \n exit") - | nc localhost 5554
    

    5554是 adb devices 中显示的仿真器端口号 .

    如果 adb emu 工作会更好 .

  • 1

    对于Android Studio用户:

    运行模拟器,

    然后,转到 Tools -> Android ->Android device monitor

    打开 Emulator Control 选项卡,然后使用位置控制组 .

  • 4

    打开Android工作室 - >工具菜单 - > Android-> Android设备监视器 - >仿真器选项卡 - >位置控制 - >设置所需的纬度和经度,并根据需要检查项目

  • 2

    在日食:

    您可能必须向下拖动DDMS窗口 . “位置控制”位于“电话操作”下,可能会被正常大小的控制台视图隐藏(带控制台的栏,LogCat等可能会覆盖它!)

相关问题