Unable to simulate location data in Android emulator

I'm trying to test my app, which uses geolocation using the emulator. Several methods are described here. I'm going to Window->Open Perspective->DDMS , then entering lat. and long. one in Location Controls and then I hit "Send".

在这里输入图像描述

But it doesn't work. Instead I see the following error: Unable to send command to the emulator.

Why is this happening!?

I don't think my app is the problem because I tested with the emulator's default browser and it also cannot access location info.

Details:

  • OSX 10.9.4
  • AVD_for_Nexus_4_by_Google targeting v4.4.2
  • Eclipse IDE for Android Developers 23.0.2.1259578
  • Update: I changed to AVD_for_Galaxy_Nexus_by_Google and it still doesn't work, but I no longer see that error. I click send and nothing happens.

    Update2: I've tested using Telnet to pass location data to the emulator, and again nothing happens. No errors. Just nothing. Urgh!

    telnet localhost 5554
    geo fix 50 50
    

    It responds with OK but nothing happens. Still no location data available.

    Update3: I notice a stream of the following errors in LogCat

    09-20 17:58:59.910: E/eglCodecCommon(1777): glUtilsParamSize: unknow param 0x00000b44
    09-20 17:58:59.910: E/eglCodecCommon(1777): glUtilsParamSize: unknow param 0x00000bd0
    09-20 17:58:59.930: E/eglCodecCommon(1777): **** ERROR unknown type 0x0 (glSizeof,72)
    

    The app seems to be running fine, and these errors are supposedly explained here.

    Update 4: I've seen multiple suggestions to confirm that my AVD has GPS Support enabled, but this option/setting does not appear anywhere. When I open the "Android Virtual Device Manager" and then click "Edit" on one of my devices, this is what I see: 在这里输入图像描述

    No mention of "GPS Support".

    Update 5: I checked the config.ini file for all my AVDs and they are all correctly set to hw.gps=yes . I also created an AVD using a Google API target, however I'm still having the same problem. The app loads but no location data is available, with "Location Controls" as well as telnet.

    Update 6: Following Gyebro's suggestions below... trying to load his LocationDemo app... 在这里输入图像描述

    Here's what I see in the LogCat:


    To check whether your emulator supports GPS, go to ~/.android/avd/<emulatorname>.avd/ and check config.ini and hardware-qemu.ini (if exists) they should contain:

    hw.gps = yes

    EDIT
    You must use a Google APIs system image. You should set Google APIs - API Level 1# as target

    End of EDIT

    Assuming this is so, and Location is enabled in your emulator, run this test application in your emulator: LocationTest demo, for details see the Dev docs on Retrieving the Current Location

    This sample implements GooglePlayServicesClient.ConnectionCallbacks , GooglePlayServicesClient.OnConnectionFailedListener and LocationListener . And also checks for Google Play Services before connecting with the LocationClient (that's why we needed a Google Emulator image.) (See MainActivity.java)

    After you start the app, you should see the Location icon in the status bar. Also verify, that the GP Services are present and the LocationClient is connected in the Log.

     D/LocationTest﹕ Google Play services is available.
     D/LocationTest﹕ LocationClient: Connected
    

    After sending geo fix 66 80 using telnet (should respond with OK ) or other valid coordinates using DDMS, you should see:

     D/LocationTest﹕ Location changed!
    

    If you are still lost with this approach, another way to simulate locations is to create a Mock Location Provider app.


    You really should use GENYMOTION it offers a GPS feature in which u set the location coordinates, plus it's faster than the default emulator and works fine in almost every OS, heres the Docus on how to apply that GPS stuff here inside that page look for "GPS widget". Good luck.

    Heres a shot from that window

    genymotino gps小部件


    I tried with latest SDK and adb tools, i see the same problem with Google Maps and web browser based location (maps.google.com). I used adb command line as well as telnet methods to set the location. Also verified my .avd file has hw.gps=yes (which is set by default). I even tried with older Google API images. I made sure to try out different accuracy levels too - device only, high accuracy etc. I notice lot of graphics rendering issues and quite a few opengl error messages in logcat, similar to ones you see.

    I did get google maps app to work on Android emulator using mock locations feature. You can use mock locations on a real device too, which i prefer for its performance. For details on how to use mock location please see this.. Download the zip file which has LocationProvider project , that lets you simulate different location and movement scenarios.

    so you can pick:

  • Use a physical android device with mock locations feature
  • If you want to use emulator, try with mock locations
  • I had success with genymotion too, you can set any location you want from command line genyshell that comes with genymotion

    genyshell.exe -c "gps setstatus enabled" genyshell.exe -c "gps setlatitude 30.3077609" genyshell.exe -c "gps setlongitude -97.7534014"

  • device is preferable for performance reasons.

    Update: I tested with LocationTest demo by gyebro and it works when i set the location params using telnet. So the problem seems to be with google maps or browser and not with emulator or adb tools. 位置测试演示

    链接地址: http://www.djcxy.com/p/90640.html

    上一篇: 启用GPS提供程序但getLastKnownLocation(提供程序)返回null

    下一篇: 无法在Android模拟器中模拟位置数据