Android 에뮬레이터에서 GPS 위치를 에뮬레이트하는 방법은 무엇입니까?


445

테스트를 위해 Android 에뮬레이터에서 경도와 위도를 얻고 싶습니다.

아무도 이것을 달성하는 방법을 안내 할 수 있습니까?

에뮬레이터의 위치를 ​​테스트 위치로 설정하려면 어떻게합니까?


당신이 Genymotion를 사용하는 경우 : stackoverflow.com/questions/30709329/...
Hachem Benyahia

많은 모의 위치 앱 중 하나를 Play 스토어에 설치할 수 있습니다.
whoKnows 17

답변:


443

Telnet을 통해 에뮬레이터에 연결할 수 있습니다. 그런 다음 지역 수정, 네트워크 등과 같은 특정 데이터를 입력 할 수있는 에뮬레이터 콘솔이 있습니다.

콘솔 사용법은 여기에 광범위하게 설명되어 있습니다 . 콘솔에 연결하려면 명령 행을 열고 다음을 입력하십시오.

telnet localhost 5554

그런 다음 geo 명령을 사용하여 GPS 위치 제공자를 사용하여 모든 프로그램에 전달되는 장치에서 위도, 경도 및 필요한 경우 고도를 설정할 수 있습니다. 자세한 지침은 위의 링크를 참조하십시오.

콘솔에서 실행할 특정 명령은

geo fix <longitude value> <latitude value>

이 사이트는 현실적인 위도 / 경도를 찾는 데 유용한 것으로 나타났습니다 : http://itouchmap.com/latlong.html

하나 이상의 좌표가 필요한 경우 경로와 함께 kml 파일을 사용할 수 있으며이 기사에서는 약간 설명되어 있습니다. 현재 더 좋은 소스를 찾을 수 없습니다.


13
지리적 수정을 사용하여 모의 위도와 경도를 설정하여 여전히 null 위치를 얻습니다.
UMAR

2
또는 간단한 방법으로 에뮬레이터에서 gps를 켜고 에뮬레이터 제어로 이동하여 더미 위도, 긴 값을 제공하고 보내면 해당 값을 gps 위치로 에뮬레이터에서 얻을 수 있습니다.
UMAR

35
adb emu geo fix 30.219470 -97.745361
Bryan Rehbein

12
위도 주문 전에주의하십시오!
Christoph

14
geo fix명령은 auth처음 사용하는 경우에만 사용할 수 있습니다 . 언급 할 가치가있을 것입니다 ...
aroth

126

여기에 아무도 에뮬레이터 자체의 내장 솔루션을 언급하지 않았으므로 향후 방문자를 위해 시각적으로 공유하고 싶습니다.

먼저 Android 에뮬레이터를 실행하고 아래 표시된 메뉴 버튼 (3 개의 점)을 클릭하십시오.

메뉴 버튼이있는 에뮬레이터

그런 다음 왼쪽 창에서 위치를 선택 하고 필요에 따라 좌표를 변경하십시오. 보내기 버튼을 누르면 변경 사항이 즉시 적용됩니다 (더 나은 이해를 위해 Google지도를 열 것을 권장합니다).

여기에 이미지 설명을 입력하십시오

안드로이드 스튜디오 버전 : 2.3.3

또한 실시간으로 애플리케이션에 다른 위치를 제공하기 위해 GPX 파일을 사용할 수 있습니다. Google지도 방향 링크에서이 파일을 만드는 것은 매우 쉽습니다.

  1. Google지도로 이동하여 위치를 선택한 다음 "길 찾기"를 누르고 두 번째 위치를 입력하십시오.
  2. 경로를 만든 후 브라우저에서 링크를 복사하십시오
  3. 이 웹 사이트 ( https://mapstogpx.com)로 이동하여 "Let 's Go"상자에 대한 링크를 붙여 넣습니다.
  4. "Let 's Go"버튼을 누르면 GPX 파일이 다운로드됩니다

"GPS / KML로드"버튼을 사용하여 생성 된 파일을 에뮬레이터에로드하고 속도를 선택한 다음 하단의 녹색 재생 버튼을 누릅니다. 아래 그림과 같이 위치가 실시간으로 전송됩니다.

여기에 이미지 설명을 입력하십시오


이 솔루션에서 에뮬레이터의 재생 서비스가 필요합니까?
Kevan Aghera

나는 그렇게 생각하지 않습니다.
eden

에뮬레이터에서 앱을 열면 Google API 클라이언트가 null이므로 에뮬레이터에 맵을로드 할 수 없습니다. 그리고 모바일 장치는 괜찮습니다.
Kevan Aghera

4
이를 위해 Google 계정에 로그인 할 필요가 없습니다. 멋있는!
xarlymg89

3
새로운 위치를 인식하기 위해 에뮬레이트 된 OS를 다시 시작해야했습니다.
네이트 휘태커

109

geo fix특정 위도와 경도 좌표를 사용 하고 수동으로 결정하는 것보다 에뮬레이터의 GPS 좌표를 설정하는 더 좋은 방법을 찾고있었습니다 .

아무것도 찾을 수 없으므로 GWT와 Google Maps API를 사용하여 에뮬레이터에서 GPS 위치를 설정하는 브라우저 기반 맵 도구를 시작하는 작은 프로그램을 만들었습니다.

안드로이드 -gps 에뮬레이터

이 어려움 / 질문에 대해 의심 할 여지없이 다른 사람들을 도울 수 있기를 바랍니다.


우와, 고마워요! 설치 프로그램은 정상적으로 작동했지만 에뮬레이터에 대한 연결을 관리 할 수 ​​없었습니다. 로그는 java.net.ConnectionRefused를 인쇄합니다. 그런 다음 telnet localhost 5554 (터미널에서)를 시도했는데 효과가있었습니다. 다른 사람이 Mac에서 에뮬레이터를 성공적으로 테스트 했습니까?
ottel142

1
테스트하지는 않았지만 너무 멋져서 Google이 세상에 대해 이야기해야한다고 생각합니다. 간단한 아이디어가 항상 최고입니다. 왜 아무도 이것을 생각하지 않았습니까?
tiktak

@ ottel142-예, 실제로 그 문제없이 Mac에서 실행 중입니다 (Mavericks의 Chrome 사용). ConnectionRefusedAndroid 가상 장치를 시작하기 전에 GPS 에뮬레이터를 시작하면 해당 메시지 가 표시됩니다. 브라우저 상단에 "포트 5554에 연결하는 중 오류가 발생했습니다 ..."라고 표시되어 있습니다. "에뮬레이터 포트 변경"버튼을 클릭하여 다시 연결하면 모든 것이
제대로

정확히 내가 필요한 것.
David

이것은 좋은 프로그램이지만 시스템 위치에 따라 수레가 작동하는 방식이 바뀝니다. 내 시스템에서는 geo fix 42,42 42,42 42점 대신 쉼표 와 같아야 합니다.
nurettin 2016 년

81

를 사용하는 Eclipse경우로 이동 Window->Open Perspective->DDMS한 다음에 입력 Location Controls하고을 누르십시오 Send.


8
이것은 내가 본 가장 쉬운 방법입니다. GPS 지원을 사용하여 AVD를 설정했는지 확인한 다음 DDMS 퍼스펙티브에서 장치 아래에서 실행중인 에뮬레이터를 클릭하고 오른쪽 가운데 창의 에뮬레이터 제어 탭을 선택한 다음 맨 아래에는 위치 제어 섹션 SteveCav가 언급됩니다 (사용 중 최신 ADT를 사용하는 Java 개발자를위한 Eclipse Juno 4.2). 내 위치 컨트롤 패널에는 위치 데이터가 사전로드되어 있습니다.
Steven Magana-Zook

좋은 답변입니다! ddms가 SDK (yoursdkfolder / tools /)의 일부이기 때문에 어떤 아이디어와도 작동합니다.
Zarokka

1
이것은 위의 텔넷 솔루션이나 저에게 효과적이었습니다. 이런 식으로 내 위치를 얻으려고하지만 여전히 null입니다. LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Location location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
crowmagnumb

DDMS에서 "위치 제어"를 사용하면를 보내려고 할 때 다음 오류가 발생 Unable to send command to the emulator합니다. 왜 작동하지 않는지 아십니까? 기본 Nexus 4 AVD를 사용하고 있습니다.
emersonthis

1
나는 회색으로이 위치 제어를 할 수없는 오전
Utsav 굽타

33

Android Studio 사용자의 경우 :

에뮬레이터를 실행하고

그런 다음 Tools -> Android ->Android device monitor

Emulator Control탭을 열고 위치 컨트롤 그룹을 사용하십시오.


제 경우에는 모든 출원을 편집 할 수 없습니다. 당신은 아이디어가 있습니까?
Olkunmustafa

4
@MustafaOlkun 아마도 에뮬레이터 자체에 컨트롤이 있다는 의미 일 것입니다. 에뮬레이터 옆의 "..."을 찾으십시오.
Justin

3
나는 같은 문제를 가지고있다. 편집 할 수 없습니다. 그리고 네 "..."가 있습니다. 그러나 거기에 무엇이든 넣고 전송해도 응용 프로그램에는 아무런 변화가 없습니다 ....
KansaiRobot

14

맵 뷰가 설정되어 실행 중이라고 가정합니다.

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
하지만 내 친구는 경도와 위도가 어디입니까?
UMAR

1
에뮬레이터 제어에 모의 값을 보내는이 ans를 사용하려고 시도했지만 보내기 버튼을 누르면 아무 것도하지 않고 전송 된 값을 확인하는 메시지가 나타나지 않습니다. 후속 사항 GeoPoint g = myLocation.getMyLocation (); null 값을 반환합니다.
UMAR

내에서 사용하고 runOnFirstFix있습니까? 기기가 GPS 위치를 처음 수신 할 때 발생하는 이벤트이기 때문에이 값이 높아지면 getMyLocation반드시 값을 반환해야합니다.
David Hedlund


13

1. 안드로이드 스튜디오 사용자.

에뮬레이터를 실행 한 후 Tools-> Android-> Android device monitor로 이동하십시오.

위치 제어 그룹에서 에뮬레이터 제어 탭 변경을 클릭하십시오.

2. 이클립스 사용자.

먼저 Eclipse에서 메뉴에서 "창"을 선택한 다음 "관점 열기"를 선택한 다음 "DDMS"를 선택하십시오. 즉, Window-> Open Prespective-> DDMS입니다.

왼쪽 장치 패널에 표시되고 오른쪽에 다른 탭이 표시됩니다. "에뮬레이터 제어"탭을 선택하십시오.

하단에는 위치 제어판이 표시됩니다. "수동"탭을 선택하십시오.

텍스트 상자에 경도와 위도를 입력 한 다음 보내기 버튼을 클릭하십시오. 위치를 에뮬레이터와 응용 프로그램으로 보냅니다.

3. 텔넷 사용.

실행 명령에서 이것을 입력하십시오.

telnet localhost 5554

창을 사용하지 않는 경우 모든 텔넷 클라이언트를 사용할 수 있습니다.

텔넷에 연결 한 후 다음 명령을 사용하여 위치를 에뮬레이터로 보냅니다.

geo fix long lat    
geo fix -121.45356 46.51119 4392

4. 브라우저 기반 Google지도 도구를 사용하십시오.

GWT와 Google Maps API를 사용하여 에뮬레이터에서 GPS 위치를 설정하기 위해 브라우저 기반지도 도구를 시작하는 프로그램이 있습니다.

안드로이드 -gps 에뮬레이터


이 첫 번째 옵션은 하나의 작은 변화로 저에게 효과적이었습니다. Eclipse에서 DDMS 창을 열 수 없습니다. 빈 회색 페이지가 나타납니다. 그러나 에뮬레이터를 실행하는 동안 명령 프롬프트 (C : \ Program Files \ Android \ android-sdk \ tools \ ddms)에서 DDMS를 열면 왼쪽에 장치와 설명 된 "에뮬레이터 제어"가 표시됩니다 오른쪽에 탭이 있습니다. 감사!
Eric Barr

10

에뮬레이터 콘솔에서 "geo"명령 사용

명령 행에서 모의 ​​위치 데이터를 보내려면 다음을 수행하십시오.

  1. Android 에뮬레이터에서 응용 프로그램을 시작하고 SDK의 / tools 디렉토리에서 터미널 / 콘솔을 엽니 다.

  2. 에뮬레이터 콘솔에 연결하십시오.

    telnet localhost 5555 (에뮬레이터가 실행중인 포트로 5555를 교체하십시오)

  3. 위치 데이터를 전송합니다. * 지리적 위치를 고정하여 위치를 고정합니다.

    이 명령은 경도와 위도를 10 진수 각도로, 선택적 고도를 미터 단위로 허용합니다. 예를 들면 다음과 같습니다.

    geo fix -121.45356 46.51119 4392

8

telnet을 통해 GPS 위치를 에뮬레이터로 푸시하는 Python 스크립트를 작성했습니다. 소스와 대상 위치를 정의합니다. 좌표가 장치에 얼마나 오랫동안 푸시 될지를 제어 할 수있는 시간 오프셋도 있습니다. 한 위치가 1 초에 한 번 밀리고 있습니다.

아래 예에서 스크립트는 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()

매력처럼 작동합니다! 공유해 주셔서 감사합니다.
Alberto Gaona

음 약간의 오류가 있다고 생각합니다. 지리 수정 메시지는 경도와 위도 순서대로 다음과 같은 순서로 표시됩니다. 위의 답변을 참조하십시오.
Alberto Gaona

작동하지 않는. 에뮬레이터가 포트에서 수신 대기 중이지만 아무 것도 수신하지 않습니다.
Durga Swaroop

5

이클립스 플러그 DDMS 기능을 사용하여 GPS를 보냅니다. 여기에 이미지 설명을 입력하십시오


5

통신 포트가 차단 된 Linux에서. 터미널을 platform-tools 폴더로 이동 한 후 android sdk다음 명령을 실행하십시오.

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

5

Mac, Linux 또는 Cygwin에서 :

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

멕시코 시티에 당신을 넣을 것입니다. 경도 / 위도 / 고도를 적절히 변경하십시오. nmea에 관심이 없다면 충분합니다.


5554를 현재 에뮬레이터 청취 포트로 조정해야 할 수도 있습니다.
Alberto Gaona 2016 년

5

다음 솔루션이 저에게 효과적이었습니다-명령 줄을 열고 쓰십시오.

adb emu geo fix [longtitude] [latitude]

5

마지막으로 최신 릴리스의 Android Studio 4 및 그의 새로운 에뮬레이터 업데이트 10/23/2019가 더 쉬워졌습니다. 에뮬레이터를 시작하고 에뮬레이터 매개 변수로 이동합니다 ...> "경로"탭에서 맵에서 두 지점을 선택하고 1000km / h 이상으로 이동할 수있는 조정 가능한 재생 속도로 새로운 경로를 시작할 수 있습니다!

여기에 이미지 설명을 입력하십시오


그래서 현재 위도 lng를 얻는 방법?
Mahmoud Ayman


4

먼저 이클립스의 DDMS 섹션으로 이동하십시오. 열기 에뮬레이터 제어보다 .... lat and long 수동 섹션으로 이동 한 다음 보내기 버튼을 누르십시오


3

많은 포인트에 대해 adb를 통해 지리적 수정을 설정하려고했지만 앱에서 GPS 데이터를 볼 수 없습니다. 그러나 DDMS를 열고 앱 프로세스를 선택하고 에뮬레이터 컨트롤 탭을 통해 좌표를 보내려고 시도했을 때 즉시 작동했습니다.


프로세스를 지정할 필요가 없습니다 ... 또는 2010 년의 DDMS가이를 수행해야합니다.

3

Dalvik 디버그 모니터> 에뮬레이터 선택> 에뮬레이터 제어 탭> 위치 제어.

DDMS-android_sdk / tools / ddms 또는 android_sdk / tools / monitor


2

이클립스를 사용하는 경우 에뮬레이터 컨트롤러를 사용하면 위도 및 경도를 수동으로 설정하고 에뮬레이터에서 맵 기반 앱을 실행할 수 있습니다


2

Android Studio (1.3)를 사용중인 경우 :

  • 메뉴 "도구"를 클릭하십시오
  • "기계적 인조 인간"
  • "Android 기기 모니터"
  • 현재 에뮬레이터를 클릭하십시오
  • "에뮬레이터 제어"탭
  • "위치 제어"로 이동하여 위도 및 경도 입력

2

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작동 하면 더 좋았을 것입니다.


매우 유용한 하나의 라이너! 내 경우에는 \ n 사이의 공백을 제거해야했습니다. token = $ (cat ~ / .emulator_console_auth_token); cat <(에코 -e "auth $ token \ ngeo fix 96.0290791 19.9041016 \ nexit")-| nc localhost 5554
Jeremie

1

위의 솔루션이 작동하지 않는 경우 이 시도:

Android Manifest.xml 내부 에서 애플리케이션 태그 외부 에 다음 매니페스트 태그 내부에 다음 두 개의 링크를 추가하십시오.

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

1

에뮬레이터가 Google API없이 Android 이미지를 실행 중일 때 에뮬레이터에서 GPS 수정을 얻을 수 없었습니다. Google API를 포함하도록 이미지를 변경하자마자 여기에 언급 된 모든 방법으로 GPS 수정 작업을 수행 할 수 있습니다.

AVD를 만들 때 Google API로 이미지를 선택해야합니다.


이미지의 의미는 무엇이며 AVD를 만드는 동안 Google API로 이미지를 어떻게 선택합니까? 일식에서 AVD를 생성하는 동안 그러한 옵션이 없습니다.
user1911703

Android SDK 관리자를 통해 Google API로 이미지를 다운로드했는지 확인하십시오.
dvim

1

쉘 명령 " geo fix ... " 를 사용하기 위해 이미 언급 된 여러 번 답변이 정답입니다. 그러나 LocationClient.getLastLocation () 을 사용 하여 데이터를 검색하는 경우 처음에는 작동하지 않는다는 것을 언급 할 가치가 있습니다. LocationClient 클래스는 Google Play 서비스를 사용하여 좌표를 검색합니다. 나에게 이것은 에뮬레이터 맵 앱을 한 번 실행 한 후에 작동하기 시작했습니다. 처음 시작하는 동안 Google 앱이 사용자 위치에 액세스하도록 허용하라는 메시지가 표시됩니다.


1

내 자신의 프로젝트를 위해 Android 에뮬레이터에 시뮬레이션 된 위치를 제공 할 수있는 온라인 서비스를 개발했습니다.

그것은 단지 위도 / 론뿐만 아니라 속도, 코스, 정확한 시간 등을 설정할 수 있도록 지오 픽스 대신 지오 nmea를 사용합니다.

이 서비스에는 nc (netcat) 명령 줄 유틸리티가 필요합니다.

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




1

안드로이드 스튜디오-> 도구 메뉴-> 안드로이드-> 안드로이드 장치 모니터-> 에뮬레이터 탭-> 위치 제어-> 필요한 위도 및 경도를 설정하고 필요에 따라 프로젝트를 확인하십시오


코딩 부분에서 직접 확인할 정적 위치 값 (위도 및 경도)을 설정할 수 있습니까?
Premkumar Manipillai

0

일식에서 :

DDMS 창을 아래로 끌어 야 할 수도 있습니다. '위치 제어'는 '전화 작업'아래에 있으며 보통 크기의 콘솔보기에 의해 숨겨 질 수 있습니다 (콘솔, LogCat 등이있는 막대가이를 가리킬 수 있습니다).

~


DDMS 내부에서 에뮬레이터 제어 아래에 있습니다. 위치 컨트롤 아래에있는 탭.
user914425
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.