Test için Android emülatöründe boylam ve enlem almak istiyorum.
Herhangi biri bana bunu nasıl başarabilir?
Emülatörün yerini bir test konumuna nasıl ayarlarım?
Test için Android emülatöründe boylam ve enlem almak istiyorum.
Herhangi biri bana bunu nasıl başarabilir?
Emülatörün yerini bir test konumuna nasıl ayarlarım?
Yanıtlar:
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.
geo fix
Komut eğer yalnızca auth
ilk. Bahsetmeye değer olabilir ...
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:
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).
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:
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.
Emülatörün GPS koordinatlarını ayarlamak geo fix
ve 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:
İnşallah şüphesiz bu zorluk / soru karşısında yanılmak olacak diğerlerine yardım etmek için yararlı olabilir.
ConnectionRefused
Android 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 "
geo fix 42,42 42,42 42
nokta yerine virgül gibi olmalı .
Kullanıyorsanız Eclipse
, adresine gidin Window->Open Perspective->DDMS
, ardından birini yazın Location Controls
ve tuşuna basın Send
.
LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
Unable to send command to the emulator
. Neden çalışmadığına dair bir fikrin var mı? Varsayılan Nexus 4 AVD kullanıyorum
Android Studio kullanıcıları için:
emülatörü çalıştır,
Sonra şuraya git Tools -> Android ->Android device monitor
Emulator Control
Sekmeyi açın ve konum denetimleri grubunu kullanın.
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.
runOnFirstFix
? Çünkü cihaz ilk kez GPS pozisyonu aldığında ortaya çıkan olay budur, bu yüzden eğer yükseltilmişse getMyLocation
kesinlikle bir değer döndürmelidir.
Yeni emülatör için:
http://developer.android.com/tools/devices/emulator.html#extended
Temel olarak, öykünücü denetimlerinde (öykünücünün sağında) üç nokta düğmesine tıkladığınızda konum da dahil öykünücüyü denetlemenize olanak tanıyan bir menü açılır.
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:
Öykünücü konsolunda "geo" komutunu kullanma
Sahte konum verilerini komut satırından göndermek için:
Uygulamanızı Android emülatöründe başlatın ve SDK'nızın / tools dizininde bir terminal / konsol açın.
Emülatör konsoluna bağlayın:
telnet localhost 5555
(5555'i taklitçinizin üzerinde çalıştığı bağlantı noktasıyla değiştirin)
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
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()
GPS göndermek için eclipse plug DDMS işlevini kullanıyorum.
İletişim bağlantı noktalarının engellendiği Linux'ta. terminaldeki platform araçları klasörüne gidin android sdk
ve şu komutu çalıştırın:
./adb -s #{device_name} emu geo fix #{longitude} #{latitude}
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.
Aşağıdaki çözüm benim için çalıştı - komut satırını aç ve yaz:
adb emu geo fix [longtitude] [latitude]
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!
Sahte Konum Verilerini Sağlama bölümüne bakın . Bunun için bir çözüm bulacaksınız.
İlk önce tutulmanızdaki DDMS bölümüne gidin Açık emülatör Kontrolünden Daha ....
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ı.
Android Studio (1.3) kullanıyorsanız:
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
.
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>
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.
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.
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.
Mevcut GPS konumunuzu taklit etme esnekliği veren genymotion gibi bir emülatör kullanabilirsiniz .
Android Studio için “Mock Location Plugin” adlı bir eklenti var. Bu eklenti ile birden fazla noktayı taklit edebilirsiniz. Ayrıntılı bir kullanım kılavuzunu şu bağlantıda bulabilirsiniz: Android Studio. Mock Location Plugin ile birden fazla GPS noktasını simüle edin
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
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!)
~