Saya ingin mendapatkan bujur dan lintang dalam emulator Android untuk pengujian.
Adakah yang bisa membimbing saya bagaimana mencapai ini?
Bagaimana cara mengatur lokasi emulator ke posisi pengujian?
Saya ingin mendapatkan bujur dan lintang dalam emulator Android untuk pengujian.
Adakah yang bisa membimbing saya bagaimana mencapai ini?
Bagaimana cara mengatur lokasi emulator ke posisi pengujian?
Jawaban:
Anda dapat terhubung ke Emulator melalui Telnet. Anda kemudian memiliki konsol Emulator yang memungkinkan Anda memasukkan data tertentu seperti perbaikan geo, jaringan dll.
Cara menggunakan konsol dijelaskan secara luas di sini . Untuk terhubung ke konsol, buka baris perintah dan ketik
telnet localhost 5554
Anda kemudian dapat menggunakan perintah geo untuk mengatur garis lintang, bujur dan jika perlu ketinggian pada perangkat yang dilewatkan ke semua program menggunakan penyedia lokasi gps. Lihat tautan di atas untuk instruksi lebih lanjut.
Perintah khusus untuk dijalankan di konsol adalah
geo fix <longitude value> <latitude value>
Saya menemukan situs ini berguna untuk menemukan lat / lng yang realistis: http://itouchmap.com/latlong.html
Jika Anda membutuhkan lebih dari satu koordinat, Anda dapat menggunakan file kml dengan rute juga sedikit dijelaskan dalam artikel ini . Saya tidak dapat menemukan sumber yang lebih baik saat ini.
geo fix
Perintah ini hanya tersedia jika Anda auth
pertama. Mungkin layak disebut ...
Tidak ada seorang pun di sini yang menyebutkan solusi bawaan dari emulator itu sendiri, jadi untuk pengunjung masa depan, saya ingin membaginya dengan visual.
Pertama, jalankan Android Emulator Anda dan klik tombol menu (3 titik) yang ditunjukkan di bawah ini:
Kemudian dari panel kiri, pilih Lokasi dan ubah koordinat sesuai dengan kebutuhan Anda. Setelah menekan tombol Kirim , perubahan akan segera berlaku (Saya sarankan Anda membuka Google Maps untuk pemahaman yang lebih baik).
Versi Android Studio: 2.3.3
Selain itu, untuk membuat lokasi berbeda Anda datang ke aplikasi Anda secara real time, Anda dapat menggunakan file GPX. Sangat mudah untuk membuat file ini dari tautan arah Google Map:
Gunakan tombol "Load GPS / KML" untuk memuat file yang dibuat ke emulator Anda, pilih kecepatan, dan tekan tombol putar hijau di bagian bawah. Lokasi akan dikirim secara real time seperti yang ditunjukkan pada gambar di bawah ini.
Saya mencari cara yang lebih baik untuk mengatur koordinat GPS emulator daripada menggunakan geo fix
dan secara manual menentukan koordinat lintang dan bujur tertentu.
Tidak dapat menemukan apa pun, saya mengumpulkan sebuah program kecil yang menggunakan GWT dan Google Maps API untuk meluncurkan alat peta berbasis browser untuk mengatur lokasi GPS di emulator:
Semoga bisa bermanfaat untuk membantu orang lain yang pasti akan menemukan kesulitan / pertanyaan ini juga.
ConnectionRefused
pesan itu jika saya meluncurkan emulator GPS sebelum memulai perangkat virtual Android. Di bagian atas browser saya juga tertulis "Kesalahan membuat koneksi pada port 5554 ..." Semuanya berfungsi dengan baik jika saya mengklik tombol "Ubah Emulator Port" untuk menghubungkan kembali
geo fix 42,42 42,42 42
koma, bukan titik.
Jika Anda menggunakan Eclipse
, buka Window->Open Perspective->DDMS
, lalu ketik satu Location Controls
dan tekan Send
.
LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
Unable to send command to the emulator
. Adakah yang tahu mengapa itu tidak berhasil? Saya menggunakan Nexus 4 AVD default
Untuk pengguna Android Studio:
jalankan emulator,
Lalu, pergi ke Tools -> Android ->Android device monitor
buka Emulator Control
Tab, dan gunakan grup kontrol lokasi.
Dengan anggapan Anda telah menyiapkan dan menjalankan tampilan peta:
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();
}
});
Anda memerlukan izin berikut dalam manifes Anda:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
Dan untuk mengirim koordinat tiruan ke emulator dari Eclipse, Buka menu "Window", pilih "Show View"> "Other"> "Emulator control", dan Anda dapat mengirim koordinat dari panel kontrol emulator yang muncul.
runOnFirstFix
? Karena itulah peristiwa yang dinaikkan ketika perangkat pertama kali menerima posisi GPS, jadi jika itu pernah dinaikkan, getMyLocation
pasti harus mengembalikan nilai.
Untuk emulator baru:
http://developer.android.com/tools/devices/emulator.html#extended
Pada dasarnya, klik pada tombol tiga titik di kontrol emulator (di sebelah kanan emulator) dan itu akan membuka menu yang akan memungkinkan Anda untuk mengontrol emulator termasuk lokasi
1. Pengguna Android Studio.
Setelah menjalankan emulator, goto Tools-> Android-> monitor perangkat Android
Klik perubahan Tab Kontrol Emulator dari grup kontrol lokasi.
2. Pengguna Eclipse.
First In Eclipse In Menu Pilih "Window" lalu Pilih "Open Perspective" lalu Pilih "DDMS". yaitu Window-> Open Prespective-> DDMS.
Anda akan melihat di Panel Perangkat Sisi Kiri dan di Sisi Kanan Anda akan melihat tab yang berbeda. Pilih Tab "Kontrol Emulator".
Di bagian bawah Anda akan melihat Panel Kontrol Lokasi. Pilih Tab "Manual".
Masukkan Bujur dan Lintang di Kotak Teks lalu Klik Tombol Kirim. Ini akan mengirimkan posisi kepada Anda emulator dan aplikasi.
3. Menggunakan telnet.
Dalam menjalankan perintah ketik ini.
telnet localhost 5554
Jika Anda tidak menggunakan windows, Anda dapat menggunakan klien telnet apa pun.
Setelah terhubung dengan telnet gunakan perintah berikut untuk mengirim posisi Anda ke emulator.
geo fix long lat
geo fix -121.45356 46.51119 4392
4. Gunakan alat Google maps berbasis browser
Ada program yang menggunakan GWT dan Google Maps API untuk meluncurkan alat peta berbasis browser untuk mengatur lokasi GPS di emulator:
Menggunakan perintah "geo" di konsol emulator
Untuk mengirim data lokasi tiruan dari baris perintah:
Luncurkan aplikasi Anda di emulator Android dan buka terminal / konsol di direktori / tools SDK Anda.
Hubungkan ke konsol emulator:
telnet localhost 5555
(Ganti 5555 dengan port apa pun yang menjalankan emulator Anda)
Kirim data lokasi: * perbaikan geografis untuk mengirim lokasi geografis tetap.
Perintah ini menerima bujur dan lintang dalam derajat desimal, dan ketinggian opsional dalam meter. Sebagai contoh:
geo fix -121.45356 46.51119 4392
Saya menulis skrip python untuk mendorong lokasi gps ke emulator melalui telnet. Ini mendefinisikan sumber dan lokasi tujuan. Ada juga offset waktu yang memungkinkan Anda mengontrol berapa lama koordinat akan didorong ke perangkat. Satu lokasi sedang didorong sekali per detik.
Dalam contoh di bawah ini, skrip bergerak dari Berlin ke Hamburg dalam 120 detik. Satu langkah / lokasi gps per detik dengan jarak acak.
#!/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()
Saya menggunakan fungsi eclipse plug DDMS untuk mengirim GPS.
Di Linux di mana port komunikasi diblokir. arahkan terminal ke folder platform-tools di dalam android sdk
dan jalankan perintah ini:
./adb -s #{device_name} emu geo fix #{longitude} #{latitude}
Di Mac, Linux atau Cygwin:
echo 'geo fix -99.133333 19.43333 2202' | nc localhost 5554
Itu akan menempatkan Anda di Mexico City. Ubah bujur / lintang / ketinggian Anda sesuai. Itu harus cukup jika Anda tidak tertarik pada nmea.
Solusi berikut ini berfungsi untuk saya - buka baris perintah dan tulis:
adb emu geo fix [longtitude] [latitude]
Akhirnya dengan rilis terbaru Android Studio 4 dan pembaruan Emulator barunya 10/23/2019 menjadi lebih mudah. Mulai emulator Anda dan buka parameter emulator ...> di tab "Rute" Anda dapat memilih dua titik di peta dari / ke dan memulai rute baru dengan kecepatan pemutaran yang dapat disesuaikan hingga lebih dari 1000 km / j!
Lihat Memperoleh Lokasi Pengguna
Lihat di bawah Menyediakan Data Lokasi Mock . Anda akan menemukan solusinya.
Pertama masuk di bagian DDMS di gerhana Anda Daripada buka emulator Control .... Pergi ke Bagian Manual mengatur lat dan panjang dan kemudian tekan tombol Kirim
Saya mencoba untuk mengatur perbaikan geo melalui adb untuk banyak poin dan tidak bisa membuat aplikasi saya melihat data GPS. Tetapi ketika saya mencoba membuka DDMS, memilih proses aplikasi saya dan mengirimkan koordinat melalui tab kontrol emulator itu langsung bekerja.
Jika Anda menggunakan Android Studio (1.3):
Buat saja jawaban Alberto Gaona menjadi satu baris
token=$(cat ~/.emulator_console_auth_token); cat <(echo -e "auth $token \n geo fix 96.0290791 16.9041016 \n exit") - | nc localhost 5554
5554 adalah nomor port emulator yang ditunjukkan pada adb devices
.
Akan lebih baik jika adb emu
bekerja.
Jika solusi di atas tidak berhasil. Coba ini:
Di dalam Manifest.xml android Anda, tambahkan dua tautan berikut di luar tag aplikasi, tetapi di dalam tag manifes Anda tentu saja
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" ></uses-permission>
<uses-permission android:name="android.permission.INTERNET" ></uses-permission>
Saya tidak bisa mendapatkan perbaikan GPS pada emulator ketika emulator menjalankan gambar Android tanpa Google APIs. Segera setelah saya mengubah gambar menjadi mengandung Google APIs semua cara yang disebutkan di sini untuk memperbaiki GPS.
Pastikan Anda memilih gambar dengan Google APIs saat membuat AVD.
Jawaban berulang beberapa kali yang disebutkan untuk menggunakan perintah shell " perbaikan geo ... " adalah jawaban yang benar. Tetapi jika Anda menggunakan LocationClient.getLastLocation () untuk mengambil data Anda, perlu disebutkan bahwa itu tidak akan berfungsi pada awalnya. Kelas LocationClient menggunakan Layanan Google Play untuk mengambil koordinat. Bagi saya ini mulai bekerja setelah menjalankan aplikasi peta emulator sekali. Selama awal pertama Anda diminta untuk mengizinkan akses aplikasi Google ke lokasi Anda, yang saya kira berhasil.
Untuk proyek saya sendiri, saya mengembangkan layanan online yang dapat memberikan lokasi simulasi ke emulator Android.
Ini menggunakan geo nmea daripada perbaikan geo yang memungkinkannya untuk mengatur kecepatan, kursus, waktu yang tepat dll. Selain hanya lat / lon.
Layanan ini memerlukan utilitas baris perintah nc (netcat) dan tidak ada yang lain.
Anda dapat menggunakan emulator seperti genymotion yang memberi Anda fleksibilitas untuk meniru lokasi GPS Anda saat ini, dll.
Ada plugin untuk Android Studio yang disebut "Mock Location Plugin". Anda dapat meniru banyak titik dengan plugin ini. Anda dapat menemukan manual penggunaan terperinci dalam tautan ini: Android Studio. Mensimulasikan beberapa titik GPS dengan Plugin Mock Location
Buka Android studio-> Alat menu-> Android-> Monitor Perangkat Android-> Tab Emulator-> Kontrol lokasi-> Atur lintang dan bujur yang Anda inginkan dan periksa proyek Anda sesuai kebutuhan Anda
Dalam gerhana:
Anda mungkin harus menyeret jendela DDMS ke bawah. 'Kontrol Lokasi' terletak di bawah 'Tindakan Telephony' dan mungkin disembunyikan oleh tampilan konsol berukuran normal (bilah dengan konsol, LogCat dll. Mungkin menutupinya!)
~