Android Emulator'da GPS konumunu nasıl taklit edebilirim?


Yanıtlar:


443

Emülatöre Telnet üzerinden bağlanabilirsiniz. Daha sonra coğrafi düzeltmeler, ağ vb. Gibi belirli verileri girmenizi sağlayan bir Emülatör konsolunuz var.

Konsolun nasıl kullanılacağı burada kapsamlı bir şekilde açıklanmaktadır . Konsola bağlanmak için bir komut satırı açın ve şunu yazın

telnet localhost 5554

Ardından, gps konum sağlayıcısını kullanarak tüm programlara aktarılan aygıtta bir enlem, boylam ve gerekirse yükseklik ayarlamak için geo komutunu kullanabilirsiniz. Daha fazla talimat için yukarıdaki bağlantıya bakın.

Konsolda çalıştırılacak belirli komut

geo fix <longitude value> <latitude value>

Bu siteyi gerçekçi bir lat / lng bulmak için yararlı buldum: http://itouchmap.com/latlong.html

Bir koordinattan daha fazlasına ihtiyacınız varsa, bir rota ile bir kml dosyasını da kullanabilirsiniz, bu makalede biraz açıklanmıştır . Şu anda daha iyi bir kaynak bulamıyorum.


13
Coğrafi düzeltme kullanarak ben de alay enlem ve boylam hala boş konum elde ayarladım.
UMAR

2
ya da basit bir şekilde emülatörde gps'i açın ve emülatör kontrolüne gidin kukla lat, uzun değerler verin ve size bu değerleri bir gps konumu olarak emülatörde alacaksınız.
UMAR

35
adb emu geo fix 30.219470 -97.745361
Bryan

12
Sipariş dikkat, lat önce yalnız!
Christoph

14
geo fixKomut eğer yalnızca authilk. Bahsetmeye değer olabilir ...
aroth

126

Burada hiç kimse emülatörün yerleşik çözümünden bahsetmedi, bu yüzden gelecekteki ziyaretçiler için görsellerle paylaşmak istiyorum.

İlk olarak, Android Emulator'unuzu çalıştırın ve aşağıda gösterilen menü düğmesine (3 nokta) tıklayın:

menü düğmeli öykünücü

Sonra sol bölmeden seçin Konum ve ihtiyaçlarınıza göre koordinatları değiştirin. Gönder düğmesine bastıktan sonra değişiklikler hemen geçerli olur (daha iyi anlaşılması için Google Haritalar'ı açmanızı öneririm).

resim açıklamasını buraya girin

Android Studio Sürümü: 2.3.3

Ayrıca, farklı konumlarınızın uygulamanıza gerçek zamanlı olarak gelmesini sağlamak için GPX dosyasını kullanabilirsiniz. Bu dosyayı Google Harita yön bağlantısından oluşturmak çok kolay:

  1. Google haritasına gidin, bir konum seçin, ardından "Yol Tarifi" tuşuna basın ve ikinci konumu girin.
  2. Rota oluşturulduktan sonra tarayıcıdan bir bağlantı kopyalayın
  3. Bu web sitesine gidin: https://mapstogpx.com ve bağlantıyı "Gidelim" kutusuna yapıştırın
  4. "Let's Go" düğmesine bastığınızda GPX dosyası indirilecek

Oluşturulan dosyayı emülatörünüze yüklemek için "GPS / KML Yükle" düğmesini kullanın, hızı seçin ve alttaki yeşil oynat düğmesine basın. Konumlar, aşağıdaki resimde gösterildiği gibi gerçek zamanlı olarak gönderilecektir.

resim açıklamasını buraya girin


Bu çözümde emülatörde bir oyun hizmetlerine ihtiyacınız var?
Kevan Aghera

Ben öyle düşünmüyorum.
eden

i emülatörde uygulamayı açtığınızda google api istemcisi null yani öykünücüye harita yükleyemiyor. ve mobil cihaz benim için uygun.
Kevan Aghera

4
Bunu yapmak için Google Hesabınızda oturum açmanıza gerek olmadığını onaylarım. Güzel!
xarlymg89

3
Yeni konumu tanıması için taklit işletim sistemini yeniden başlatmam gerekiyordu.
Nate Whittaker

109

Emülatörün GPS koordinatlarını ayarlamak geo fixve belirli enlem ve boylam koordinatlarını kullanmaktan ve manuel olarak belirlemekten daha iyi bir yol arıyordum .

Bir şey bulamıyorum, emülatördeki GPS konumunu ayarlamak için tarayıcı tabanlı bir harita aracı başlatmak için GWT ve Google Maps API kullanan küçük bir program hazırladım:

robot-GPS-emülatörü

İnşallah şüphesiz bu zorluk / soru karşısında yanılmak olacak diğerlerine yardım etmek için yararlı olabilir.


vay, teşekkür ederim! kurulum gayet iyi çalıştı, ama öykünücüye bir bağlantı yönetemedim -> log baskılar java.net.ConnectionRefused. sonra telnet localhost 5554 (terminalden) denedim ve işe yaradı .. başkası başarıyla emülatör mac üzerinde test var mı?
ottel142

1
Test etmedim, ancak bu çok harika görünüyor, Google'ın dünyaya bunu anlatması gerektiğini düşünüyorum. Basit fikirler her zaman en iyisidir. Neden kimse bunu düşünmedi?
tiktak

@ ottel142 - Evet, aslında bu sorun olmadan bir mac üzerinde çalışıyorum (Mavericks üzerinde Chrome kullanarak). ConnectionRefusedAndroid sanal cihazını başlatmadan önce GPS emülatörünü başlatırsam bu mesajı görüyorum . Tarayıcımın üst kısmında "5554 numaralı bağlantı noktasında bağlantı kurulurken hata oluştu ..." yazıyor "
Yeniden

Tam olarak ihtiyacım olan şey.
David

Bu iyi bir programdır, ancak sistemin konumu yüzerlerin çalışma şeklini değiştirir. Benim sistemimde geo fix 42,42 42,42 42nokta yerine virgül gibi olmalı .
nurettin

81

Kullanıyorsanız Eclipse, adresine gidin Window->Open Perspective->DDMS, ardından birini yazın Location Controlsve tuşuna basın Send.


8
Bu şimdiye kadar gördüğüm en kolay yöntem. AVD'nizi GPS desteği ile kurduğunuzdan emin olun, ardından DDMS perspektifinde Cihazlar altında çalışan emülatöre tıklayın, sağ orta bölmedeki Emülatör Kontrolü sekmesini seçin, ardından altta SteveCav'ın bahsettiği Konum Kontrolleri bölümü ( En son ADT'ye sahip Java Geliştiricileri için Eclipse Juno 4.2). Konum Denetimlerim paneline konum verileri önceden yüklenmiştir.
Steven Magana-Zook

mükemmel cevap! herhangi bir ide ile çalışır çünkü ddms sdk'nin bir parçasıdır (yoursdkfolder / tools /)
Zarokka

1
Bu da yukarıdaki telnet çözümü benim için işe yaramıyordu. Konumumu böyle almaya çalışıyorum ama yine de boş. LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Location location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
crowmagnumb

DDMS'de "Konum Denetimleri" ni kullandığımda göndermeye çalışırken aşağıdaki hatayı alıyorum Unable to send command to the emulator. Neden çalışmadığına dair bir fikrin var mı? Varsayılan Nexus 4 AVD kullanıyorum
emersonthis

1
Bunu kontrol edemiyorum konumlar kontrolleri gri
Utsav Gupta

33

Android Studio kullanıcıları için:

emülatörü çalıştır,

Sonra şuraya git Tools -> Android ->Android device monitor

Emulator ControlSekmeyi açın ve konum denetimleri grubunu kullanın.


Benim durumumda, tüm dosyalar düzenlenemez. Bir fikrin var mı?
Olkunmustafa

4
@MustafaOlkun Muhtemelen öykünücünün üzerinde bu denetimleri olduğu anlamına gelir. Emülatörün yanında bir "..." bulun.
Justin

3
Aynı problemim var. Düzenlenemezler. ve evet "..." var. Ancak ben orada bir şey koymak ve Gönder, uygulamada hiçbir şey değişmez ....
KansaiRobot

14

Ayarlanmış ve çalıştırılmış bir harita görünümünüz olduğunu varsayarsak:

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();
    }
});

Manifestinizde aşağıdaki izne ihtiyacınız olacak:

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

Ve Eclipse'den taklitçiye sahte koordinatlar göndermek için "Pencere" menüsüne gidin, "Görünümü Göster"> "Diğer"> "Emülatör kontrolü" seçeneğini seçin ve beliren emülatör kontrol panelinden koordinatları gönderebilirsiniz.


3
ama arkadaşım enlem ve boylam nerede ??
UMAR

1
Ben emülatör kontrolüne sahte değerleri gönderme bu ans kullanarak denedim ama Gönder düğmesine bastığınızda hiçbir şey yok hiçbir şey gönderilen değerleri onaylamak için görünür ya da onaylamak için görünür. seocnd şey GeoPoint g = myLocation.getMyLocation (); boş değer döndürüyor.
UMAR

İçinde kullandığınızdan emin misiniz runOnFirstFix? Çünkü cihaz ilk kez GPS pozisyonu aldığında ortaya çıkan olay budur, bu yüzden eğer yükseltilmişse getMyLocationkesinlikle bir değer döndürmelidir.
David Hedlund


13

1. Android Studio kullanıcıları.

Emülatör çalıştırıldıktan sonra Araçlar-> Android-> Android cihaz monitörü

Konum kontrolleri grubundan Öykünücü Denetim Sekmesi değişikliğini tıklatın.

2. Tutulma kullanıcıları.

Önce Eclipse in Menu "Pencere" yi seçin, sonra "Perspektifi Aç" ı ve "DDMS" yi seçin. Pencere-> Açık Prespektif-> DDMS.

Sol Taraf Aygıtlar Panelinde ve Sağ Tarafta farklı sekmeler göreceksiniz. "Emulator Control" Sekmesini seçin.

Altta Konum Kontrolleri Panelini göreceksiniz. "Manuel" Sekmesini seçin.

Metin Kutularına Boylam ve Enlem girin, ardından Gönder Düğmesine tıklayın. Pozisyonu emülatöre ve uygulamaya gönderir.

3. Telnet kullanma.

Çalıştır komutuna şunu yazın.

telnet localhost 5554

Windows kullanmıyorsanız, herhangi bir telnet istemcisi kullanabilirsiniz.

Telnet ile bağlandıktan sonra konumunuzu emülatöre göndermek için aşağıdaki komutu kullanın.

geo fix long lat    
geo fix -121.45356 46.51119 4392

4. Tarayıcı tabanlı Google haritalar aracını kullanın

Emülatördeki GPS konumunu ayarlamak için tarayıcı tabanlı bir harita aracı başlatmak için GWT ve Google Haritalar API'sını kullanan bir program vardır:

robot-GPS-emülatörü


Bu ilk seçenek benim için küçük bir değişiklikle işe yaradı. Eclipse'den DDMS penceresini açamadım, boş bir gri sayfam var. Ancak emülatörü çalıştırırken, DDMS'yi komut isteminden (C: \ Program Files \ Android \ android-sdk \ tools \ ddms) açarsam, soldaki Cihazlar ve "Emulator Control" ile tanımladığınız pencereyi görebiliyordum "sekmesini tıklayın. Teşekkürler!
Eric Barr

10

Öykünücü konsolunda "geo" komutunu kullanma

Sahte konum verilerini komut satırından göndermek için:

  1. Uygulamanızı Android emülatöründe başlatın ve SDK'nızın / tools dizininde bir terminal / konsol açın.

  2. Emülatör konsoluna bağlayın:

    telnet localhost 5555 (5555'i taklitçinizin üzerinde çalıştığı bağlantı noktasıyla değiştirin)

  3. Konum verilerini gönderin: * sabit bir coğrafi konum göndermek için coğrafi düzeltme.

    Bu komut ondalık derece ile bir boylam ve enlem ve metre cinsinden isteğe bağlı bir yükseklik kabul eder. Örneğin:

    geo fix -121.45356 46.51119 4392

8

Gps konumlarını telnet üzerinden emülatöre göndermek için bir python betiği yazdım. Bir kaynak ve bir hedef konum tanımlar. Ayrıca, koordinatların cihaza ne kadar süre itileceğini kontrol etmenizi sağlayan bir zaman ofseti de vardır. Bir konum, saniyede bir kez itilir.

Aşağıdaki örnekte senaryo 120 saniyede Berlin'den Hamburg'a taşınmaktadır. Rasgele mesafelerle saniyede bir adım / gps konumu.

#!/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()

Tıkır tıkır çalışıyor! Paylaşım için teşekkürler.
Alberto Gaona

Mmmmm. Sanırım ufak bir hata var: Coğrafi düzeltme mesajının Boylam ve Latitude aldığını bildiğim kadarıyla: Bunları başka şekilde gönderiyorsunuz. Yukarıdaki cevaplara bakınız.
Alberto Gaona

Çalışmıyor. Emülatör bağlantı noktasını dinliyor ama hiçbir şey almıyor.
Durga Swaroop


5

İletişim bağlantı noktalarının engellendiği Linux'ta. terminaldeki platform araçları klasörüne gidin android sdkve şu komutu çalıştırın:

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

5

Mac, Linux veya Cygwin'de:

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

Bu seni Mexico City'ye koyacaktır. Boylamınızı / enleminizi / yüksekliğinizi buna göre değiştirin. Eğer nmea ile ilgilenmiyorsanız bu yeterli olacaktır.


5554'ü geçerli öykünücü dinleme bağlantı noktanıza ayarlamanız gerekebilir.
Alberto Gaona

5

Aşağıdaki çözüm benim için çalıştı - komut satırını aç ve yaz:

adb emu geo fix [longtitude] [latitude]

5

Son olarak, Android Studio 4'ün son sürümü ve yeni Emulator güncellemesi 10/23/2019 ile daha kolay hale geldi. Emülatörünüzü başlatın ve emülatör parametrelerine gidin ...> "Rotalar" sekmesinde, haritadan / noktasından iki nokta seçebilir ve 1000km / s'den daha yüksek bir hıza ayarlanabilen ayarlanabilir bir oynatma hızı ile yeni bir rota başlatabilirsiniz!

resim açıklamasını buraya girin


peki nasıl geçerli lat lng almak için?
Mahmoud Ayman


4

İlk önce tutulmanızdaki DDMS bölümüne gidin Açık emülatör Kontrolünden Daha ....


3

Birçok nokta için adb üzerinden coğrafi düzeltmeyi ayarlamaya çalışıyordum ve uygulamamın herhangi bir GPS verisini görmesini sağlayamadım. Ancak DDMS'yi açmayı, uygulamamın sürecini seçmeyi ve emülatör kontrol sekmesinden koordinatlar göndermeyi denediğimde hemen çalıştı.


Bir işlem belirtmeniz gerekmez ... Ya da belki 2010'daki DDMS bunu yapmayı gerektirir.

3

Dalvik Hata Ayıklama Monitörü> Öykünücü> Öykünücü Denetimi Sekmesi> Konum Denetimleri'ni seçin.

DDMS - android_sdk / araçlar / ddms VEYA android_sdk / araçlar / monitör


2

Tutulmayı kullanıyorsanız ve sonra Emulator denetleyicisini kullanıyorsanız, enlem ve boylamı manuel olarak ayarlayabilir ve harita tabanlı uygulamanızı emülatörde çalıştırabilirsiniz


2

Android Studio (1.3) kullanıyorsanız:

  • "Araçlar" Menüsüne tıklayın
  • "Android"
  • "Android cihaz monitörü"
  • mevcut Emülatörünüzü tıklayın
  • "Emülatör Kontrolü" Sekmesi
  • "Konum Kontrolleri" ne gidin ve Lat ve Lon girin

2

Alberto Gaona'nın cevabını tek bir satıra dönüştürün

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

5554 içinde gösterilen emülatör bağlantı noktası numarasıdır adb devices.

Çalışsaydı daha iyi olurdu adb emu.


çok kullanışlı bir astar! benim durumumda \ n: token = $ (cat ~ / .emulator_console_auth_token) arasındaki boşlukları kaldırmak zorunda kaldım; cat <(echo -e "auth $ jetonu \ ngeo düzeltme 96.0290791 19.9041016 \ nexit") - | nc localhost 5554
Jeremie

1

Yukarıdaki çözümler işe yaramazsa. Bunu dene:

Android Manifest.xml içine, uygulama etiketinin DIŞINDA aşağıdaki iki bağlantıyı ekleyin , ancak elbette manifest etiketinizin içine

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

1

Emülatör Google API'ları olmadan Android resmi çalıştırırken emülatörde GPS düzeltmesi alamadım. Görüntüyü Google API'larını içerecek şekilde değiştirir değiştirmez, bir GPS düzeltmesinin çalışmasını sağlamak için burada belirtilen yolların tümü.

AVD oluştururken Google API'larına sahip bir resim seçtiğinizden emin olun.


Image ile ne demek istersiniz ve AVD oluştururken Google API'larıyla bir resmi nasıl seçerim? tutulmada AVD oluştururken böyle bir seçenek yoktur.
user1911703

Android SDK yöneticisi aracılığıyla Google API'larıyla resim indirdiğinizden emin olun.
dvim

1

Daha önce bahsedilen birden çok kez yanıt " geo fix ... " kabuk komutunu kullanmak için doğru cevaptır. Ancak , verilerinizi almak için LocationClient.getLastLocation () yöntemini kullanırsanız, ilk başta çalışmayacağını belirtmek gerekir. LocationClient sınıfı, koordinatları almak için Google Play Hizmetini kullanır. Benim için bu bir kez emülatör haritaları uygulamasını çalıştırdıktan sonra çalışmaya başladı. İlk başlangıç ​​sırasında, hile yapan sanırım Google uygulamalarının konumunuza erişmesine izin vermeniz istenir.


1

Kendi projem için Android öykünücüsüne simüle edilmiş konum sağlayabilen bir çevrimiçi hizmet geliştirdim.

Sadece lat / lon'a ek olarak hız, rota, hassas zaman vb. Ayarlamasına izin veren coğrafi düzeltme yerine geo nmea kullanır.

Hizmet nc (netcat) komut satırı yardımcı programını gerektirir ve başka bir şey gerektirmez.

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




1

Android studio-> Araçlar menüsü-> Android-> Android Cihaz Monitörü-> Emülatör Sekmesi-> Konum kontrolü-> Gerekli enlem ve boylamınızı ayarlayın ve projenizi ihtiyacınıza göre kontrol edin


doğrudan kodlama bölümünde kontrol etmeniz gereken statik konum değerini (Enlem ve Boylam) ayarlayabilirsiniz?
Premkumar Manipillai

0

Tutulmada:

DDMS penceresini aşağı sürüklemeniz gerekebilir. 'Konum Denetimleri', 'Telefon İşlemleri' altında bulunur ve normal boyutlu bir konsol görünümünde gizlenebilir (konsollu çubuk, LogCat vb. Bunu kaplıyor olabilir!)

~


DDMS içinde Emulator Control altında buldum. Konum Denetimleri'nin altındaki sekme.
user914425
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.