Bagaimana cara meniru lokasi GPS di Android Emulator?


444

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?


Jika Anda menggunakan Genymotion: stackoverflow.com/questions/30709329/…
Hachem Benyahia

Anda dapat menginstal salah satu dari banyak aplikasi lokasi tiruan di Play Store.
whoKnows

Jawaban:


443

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.


13
menggunakan geo fix saya juga telah mengatur lintang dan bujur mock masih mendapatkan lokasi nol.
UMAR

2
atau cara sederhana nyalakan gps di emulator dan pergi ke kontrol emulator beri dummy lat, nilai yang panjang dan mengirimkan Anda akan mendapatkan nilai-nilai itu di emulator sebagai lokasi gps.
UMAR

35
adb emu geo fix 30.219470 -97.745361
Bryan Rehbein

12
Pikirkan pesanannya, lon sebelum lat!
Christoph

14
The geo fixPerintah ini hanya tersedia jika Anda authpertama. Mungkin layak disebut ...
Agustus

126

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:

emulator dengan tombol menu

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).

masukkan deskripsi gambar di sini

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:

  1. Buka google map, pilih lokasi, lalu tekan "Petunjuk Arah" dan masukkan lokasi kedua.
  2. Setelah rute dibuat, salin tautan dari browser
  3. Buka situs web ini: https://mapstogpx.com dan rekatkan tautannya ke kotak "Ayo Pergi"
  4. Tekan tombol "Ayo Pergi" dan file GPX akan diunduh

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.

masukkan deskripsi gambar di sini


dalam solusi ini butuh layanan bermain di emulator?
Kevan Aghera

Saya kira tidak.
eden

ketika saya membuka aplikasi di emulator google api client null sehingga tidak dapat memuat peta di emulator. dan perangkat seluler tidak masalah bagi saya.
Kevan Aghera

4
Saya mengonfirmasi bahwa tidak perlu masuk ke Akun Google Anda untuk melakukan ini. Keren!
xarlymg89

3
Saya harus memulai ulang OS yang diemulasi agar dapat mengenali lokasi baru.
Nate Whittaker

109

Saya mencari cara yang lebih baik untuk mengatur koordinat GPS emulator daripada menggunakan geo fixdan 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:

android-gps-emulator

Semoga bisa bermanfaat untuk membantu orang lain yang pasti akan menemukan kesulitan / pertanyaan ini juga.


Wow Terimakasih! setup bekerja dengan baik, tetapi saya tidak dapat mengelola koneksi ke emulator -> log print java.net.ConnectionRefused. kemudian saya mencoba telnet localhost 5554 (dari terminal) dan berhasil .. adakah orang lain yang berhasil menguji emulator Anda di mac
ottel142

1
Saya tidak mengujinya, tetapi ini terlihat sangat mengagumkan, saya pikir Google harus memberi tahu dunia tentang hal itu. Ide-ide sederhana selalu yang terbaik. Mengapa tidak ada yang memikirkan hal ini?
tiktak

@ ottel142 - Ya, saya benar-benar berjalan di mac tanpa masalah itu (menggunakan Chrome di Mavericks). Saya jadi melihat ConnectionRefusedpesan 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
dpdearing

Apa yang saya butuhkan.
David

Ini adalah program yang bagus, tetapi sistem lokal mengubah cara pelampung bekerja. Di sistem saya itu harus seperti geo fix 42,42 42,42 42koma, bukan titik.
nurettin

81

Jika Anda menggunakan Eclipse, buka Window->Open Perspective->DDMS, lalu ketik satu Location Controlsdan tekan Send.


8
Sejauh ini, ini adalah metode termudah yang pernah saya lihat. Pastikan Anda mengatur AVD Anda dengan dukungan GPS, lalu dalam perspektif DDMS klik pada emulator yang berjalan di bawah Perangkat, pilih tab Kontrol Emulator pada panel kanan tengah lalu di bagian bawah adalah bagian Kontrol Lokasi yang disebutkan SteveCav (Menggunakan Eclipse Juno 4.2 untuk Pengembang Java dengan ADT terbaru). Panel Kontrol Lokasi saya bahkan dimuat dengan data lokasi.
Steven Magana-Zook

jawaban bagus! bekerja dengan ide apa pun karena ddms adalah bagian dari SDK (milik Anda folder / alat /)
Zarokka

1
Ini, maupun solusi telnet di atas, bekerja untuk saya. Saya mencoba untuk mendapatkan lokasi saya seperti ini tetapi masih nol. LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); Location location = mlocManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
crowmagnumb

Ketika saya menggunakan "Kontrol Lokasi" di DDMS saya mendapatkan kesalahan berikut ketika mencoba mengirim Unable to send command to the emulator . Adakah yang tahu mengapa itu tidak berhasil? Saya menggunakan Nexus 4 AVD default
emersonthis

1
Saya tidak dapat melakukan ini kontrol lokasi diklik
Utsav Gupta

33

Untuk pengguna Android Studio:

jalankan emulator,

Lalu, pergi ke Tools -> Android ->Android device monitor

buka Emulator ControlTab, dan gunakan grup kontrol lokasi.


Dalam kasus saya, semua arsip tidak dapat diedit. Anda punya ide?
Olkunmustafa

4
@MustafaOlkun Ini mungkin berarti emulator itu sendiri memiliki kontrol di atasnya. Cari "..." di sebelah emulator.
Justin

3
Saya memiliki masalah yang sama. Mereka tidak dapat diedit. dan ya ada "...". Namun ketika saya meletakkan apa pun di sana dan Kirim, tidak ada yang berubah pada aplikasi ....
KansaiRobot

14

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.


3
tapi temanku di mana bujur dan lintangnya ??
UMAR

1
Saya telah mencoba menggunakan ini dan mengirim nilai tiruan ke kontrol emulator tetapi ketika saya menekan tombol kirim tidak melakukan apa-apa tidak ada pesan tidak ada yang muncul untuk mengkonfirmasi nilai yang dikirim atau tidak. seocnd thing GeoPoint g = myLocation.getMyLocation (); mengembalikan nilai nol.
UMAR

Apakah Anda yakin menggunakannya di dalam runOnFirstFix? Karena itulah peristiwa yang dinaikkan ketika perangkat pertama kali menerima posisi GPS, jadi jika itu pernah dinaikkan, getMyLocationpasti harus mengembalikan nilai.
David Hedlund


13

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:

android-gps-emulator


Opsi pertama ini berhasil untuk saya, dengan satu perubahan kecil. Saya tidak bisa membuka jendela DDMS dari Eclipse, saya baru saja mendapatkan halaman abu-abu kosong. Tetapi ketika saya menjalankan emulator, jika saya membuka DDMS dari prompt perintah (C: \ Program Files \ Android \ android-sdk \ tools \ ddms) maka saya dapat melihat jendela yang Anda gambarkan dengan Perangkat di sebelah kiri dan "Kontrol Emulator "tab di kanan. Terima kasih!
Eric Barr

10

Menggunakan perintah "geo" di konsol emulator

Untuk mengirim data lokasi tiruan dari baris perintah:

  1. Luncurkan aplikasi Anda di emulator Android dan buka terminal / konsol di direktori / tools SDK Anda.

  2. Hubungkan ke konsol emulator:

    telnet localhost 5555 (Ganti 5555 dengan port apa pun yang menjalankan emulator Anda)

  3. 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

8

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

Bekerja seperti pesona! Terima kasih telah berbagi.
Alberto Gaona

Mmmmm Saya pikir ada sedikit kesalahan: Sejauh yang saya tahu pesan perbaikan geo mendapat Bujur dan Lintang, dalam urutan itu: Anda mengirim mereka sebaliknya. Lihat jawaban di atas.
Alberto Gaona

Tidak bekerja Emulator mendengarkan di port tetapi tidak menerima apa pun.
Durga Swaroop


5

Di Linux di mana port komunikasi diblokir. arahkan terminal ke folder platform-tools di dalam android sdkdan jalankan perintah ini:

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

5

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.


Anda mungkin harus menyesuaikan 5554 dengan port mendengarkan emulator Anda saat ini.
Alberto Gaona

5

Solusi berikut ini berfungsi untuk saya - buka baris perintah dan tulis:

adb emu geo fix [longtitude] [latitude]

5

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!

masukkan deskripsi gambar di sini



4

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


3

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.


Anda tidak perlu menentukan proses ... Atau mungkin DDMS pada 2010 mengharuskan melakukan itu.

3

Dalvik Debug Monitor> Pilih Emulator> Tab Kontrol Emulator> Kontrol Lokasi.

DDMS - android_sdk / tools / ddms ATAU android_sdk / tools / monitor


2

Jika Anda menggunakan eclipse kemudian menggunakan pengontrol Emulator Anda dapat secara manual mengatur garis lintang dan bujur dan menjalankan aplikasi berbasis peta Anda di emulator


2

Jika Anda menggunakan Android Studio (1.3):

  • Klik pada Menu "Alat"
  • "Android"
  • "Monitor perangkat Android"
  • klik pada Emulator Anda saat ini
  • Tab "Kontrol Emulator"
  • pergi ke "Kontrol Lokasi" dan masukkan Lat dan Lon

2

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 emubekerja.


satu liner sangat berguna! dalam kasus saya, saya harus menghapus spasi antara \ n: token = $ (cat ~ / .emulator_console_auth_token); cat <(echo -e "auth $ token \ ngeo fix 96.0290791 19.9041016 \ nexit") - | nc localhost 5554
Jeremie

1

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>

1

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.


apa yang Anda maksud dengan Gambar dan saat membuat AVD bagaimana saya memilih gambar dengan Google API? tidak ada opsi seperti itu saat membuat AVD di gerhana.
user1911703

Pastikan Anda telah mengunduh gambar dengan Google API melalui manajer Android SDK.
dvim

1

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.


1

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.

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




1

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


Anda dapat menetapkan nilai lokasi statis (Latitude & Bujur) lokasi mana yang perlu Anda periksa langsung di bagian pengkodean?
Premkumar Manipillai

0

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!)

~


Di dalam DDMS saya temukan di bawah Kontrol Emulator. Tab di bawah Kontrol Lokasi.
user914425
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.