Lokasi tiruan Android di perangkat?


147

Bagaimana saya bisa mengejek lokasi saya di perangkat fisik (Nexus One)? Saya tahu Anda dapat melakukan ini dengan emulator di panel Kontrol Emulator, tetapi ini tidak berfungsi untuk perangkat fisik.


Untuk komputer desktop Anda dapat membuat / menginstal driver yang meniru perangkat GPS / perangkat port serial untuk keperluan melakukan pengujian semacam ini. Mungkin Anda bisa membuat atau menemukan sesuatu yang mirip untuk android.
AaronLS

6
Ada beberapa aplikasi di Market yang dapat meniru lokasi GPS. Misalnya "Location spoofer".
Vlad

Ada banyak aplikasi di toko yang melakukan ini .. Anda dapat mencoba ini - play.google.com/store/apps/… atau ini - play.google.com/store/apps/…
Yehuda

1
Ada juga aplikasi di toko yang mendukung perintah "perbaikan geo" dan "geo nmea" sama seperti emulator! play.google.com/store/apps/…
luv

@Iuv lebih dari itu adalah open source github.com/luv/mockgeofix
Vlad

Jawaban:


166

Sepertinya satu-satunya cara yang harus dilakukan adalah menggunakan penyedia lokasi tiruan.

Anda harus mengaktifkan lokasi tiruan di panel pengembangan di pengaturan Anda dan menambahkan

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

ke manifes Anda.

Sekarang Anda dapat masuk dalam kode Anda dan membuat penyedia lokasi tiruan Anda sendiri dan mengatur lokasi penyedia ini.


83
Ada aplikasi di pasar yang disebut "GPS Palsu". Jika Anda mengaktifkan Lokasi Mock pada perangkat Anda, itu menawarkan GUI yang bagus untuk mengatur lokasi Anda. Saya menyadari ini bukan solusi do-it-yourself, tetapi tentu saja solusi yang layak untuk pengujian cepat.
Tim Green

2
ini mungkin tautan - tanggal yang sama, dan konten yang relevan.
DefenestrationDay

4
@TimGreen milik Anda harus menjadi jawaban yang diterima (bukan hanya komentar)! Sejauh ini cara termudah untuk menguji
Bostone

Sebenarnya aplikasi "gps palsu" bukan yang terbaik karena hanya dapat mengatur lokasi dan bergerak secara acak. Versi baru mereka dapat dirutekan tetapi hanya beralih pada poin jalan sehingga lompatan besar di lokasi. Jawaban Janusz memang benar bahwa Anda perlu membuat penyedia mock Anda sendiri. Kami baru-baru ini melakukan itu dan jika ada yang membutuhkannya atau jika pertanyaan ini masih membutuhkan bantuan, saya akan memposting kode.
vkinra

5
Pernyataan "masuk kode Anda dan buat penyedia lokasi tiruan Anda sendiri" harus dijelaskan lebih terinci.
Dims

102

Jika Anda menggunakan telepon ini hanya di lab pengembangan, ada kemungkinan Anda dapat menyolder chip GPS dan memberi makan port serial langsung dengan urutan NMEA dari perangkat lain.


68
Mengapa pembenci? Jawaban ini adalah inti yang sangat sulit.
Ben Zotto

61
Hardcore awesomely meski tidak berguna / tidak relevan juga.
olivervbk

13
Cukup menyenangkan.
etienne

23
um, saya pikir siapa pun yang jawaban ini relevan, sudah tahu mereka bisa melakukan ini. Saya ragu ketiga orang tersebut mencari solusi stackoverflow.
ToolmakerSteve

10
Jika Anda mengalami kesulitan mencari tahu cara menghasilkan sekuens NMEA yang realistis ke dalam perangkat Anda yang tidak terjual, ada opsi yang luar biasa: menyolder di sana perangkat GPS eksternal yang sebenarnya dan memindahkan seluruh lab pengembangan di jalur yang sebenarnya, di atas tim pelari / pengendara sepeda motor / mobil / pesawat / apa pun tergantung pada kecepatan yang ingin Anda simulasikan. Jangan lupa untuk membuka lubang di atap lab pengembangan agar perangkat dapat menerima sinyal radio dari satelit. Sama-sama. ;-)
Stéphane Gourichon

32

Saya berharap saya punya kabel saya berguna. Saya tahu Anda bisa telnet ke emulator untuk mengubah lokasinya

$ telnet localhost 5554
Android Console: type 'help' for a list of commands
OK
geo fix -82.411629 28.054553
OK

Saya tidak ingat apakah Anda bisa telnet ke perangkat Anda, tetapi saya pikir Anda bisa. Saya harap ini membantu.

Anda memerlukan adb (jembatan debugging android) untuk ini (CLI).


Anda mendapatkan izin yang ditolak untuk semua yang Anda kirim sebagai perintah ke konsol perangkat Anda. Mungkin dimungkinkan dengan aplikasi terminal tapi saya pikir itu memerlukan akses root
Janusz

Hanya saja kita berada di halaman yang sama: Anda tidak berbicara tentang "adb shell", bukan? Yang saya bicarakan berbeda, ini adalah pengaturan yang memungkinkan Anda untuk mengatur parameter khusus android. Saya tahu, misalnya, Anda dapat mengatur penerusan port (mis. Localhost: 1234 masuk ke ponsel: 1234) tanpa akses root, sehingga Anda dapat mengatur proxy dan terowongan SOCKS melalui kabel tanpa akar.
Tim Green

Anda dapat menggunakan adb forward tcp: 6000 tcp: 23 untuk meneruskan port 6000 pada mesin Anda ke port 23 pada perangkat tetapi saya tidak dapat menghubungkan bahkan jika port ditampilkan terbuka. Menggunakan klien telnet pada perangkat dan menghubungkan ke localhost juga gagal
Janusz

15
Ini berfungsi dengan baik untuk emulator tetapi tidak berfungsi untuk perangkat yang sebenarnya. Jadi itu tidak menjawab pertanyaan OP sama sekali :(
Matthew Gilliard

4
@TimGreen Solusi Anda hanya untuk emulator. Pertanyaannya adalah tentang perangkat nyata.
IgorGanapolsky

29

Anda dapat menggunakan izin Layanan Lokasi untuk mengejek lokasi ...

"android.permission.ACCESS_MOCK_LOCATION"

dan kemudian dalam kode java Anda,

// Set location by setting the latitude, longitude and may be the altitude...
String[] MockLoc = str.split(",");
Location location = new Location(mocLocationProvider);            
Double lat = Double.valueOf(MockLoc[0]);
location.setLatitude(lat);
Double longi = Double.valueOf(MockLoc[1]);
location.setLongitude(longi);
Double alti = Double.valueOf(MockLoc[2]);
location.setAltitude(alti);

9
apa nilai mocLocationProvider?
Victor

mis. LocationManager.GPS_PROVIDER
enigma969

25

Saya sudah sukses dengan kode berikut. Meskipun itu membuat saya kunci tunggal untuk beberapa alasan (bahkan jika saya sudah mencoba pasangan LatLng berbeda), itu berhasil untuk saya. mLocationManageradalah LocationManageryang terhubung ke LocationListener:

private void getMockLocation()
{
    mLocationManager.removeTestProvider(LocationManager.GPS_PROVIDER);
    mLocationManager.addTestProvider
    (
      LocationManager.GPS_PROVIDER,
      "requiresNetwork" == "",
      "requiresSatellite" == "",
      "requiresCell" == "",
      "hasMonetaryCost" == "",
      "supportsAltitude" == "",
      "supportsSpeed" == "",
      "supportsBearing" == "",

      android.location.Criteria.POWER_LOW,
      android.location.Criteria.ACCURACY_FINE
    );      

    Location newLocation = new Location(LocationManager.GPS_PROVIDER);

    newLocation.setLatitude (/* TODO: Set Some Lat */);
    newLocation.setLongitude(/* TODO: Set Some Lng */);

    newLocation.setAccuracy(500);

    mLocationManager.setTestProviderEnabled
    (
      LocationManager.GPS_PROVIDER, 
      true
    );

    mLocationManager.setTestProviderStatus
    (
       LocationManager.GPS_PROVIDER,
       LocationProvider.AVAILABLE,
       null,
       System.currentTimeMillis()
    );      

    mLocationManager.setTestProviderLocation
    (
      LocationManager.GPS_PROVIDER, 
      newLocation
    );      
}

1
Posting bagus, lihat jawaban saya di bawah ini untuk tambahan.
icyerasor

Sejauh yang saya ingat, setTestProviderStatusdigunakan di sini untuk memberi tahu / memposting ke / menjadwalkan acara dengan LocationManager bahwa penyedia GPS telah menemukan perbaikan "sekarang" sehingga pemrosesan acara tersebut dapat terjadi.
Dr1Ku

Apa arti dari " mLocationManageradalah LocationManageryang terhubung ke LocationListener"? bagaimana saya bisa melakukan ini? Terima kasih ..
Yehuda

Berikut ini satu artikel yang menjelaskan cara memeriksa perubahan lokasi menggunakan LocationManagerlayanan dan LocationListener: blog.doityourselfandroid.com/2010/12/25/…
Dr1Ku

2
ditambah 1 untuk cara Anda merepresentasikan true (s) dan false (s) dalam metode addTestProvider
A.Alqadomi

16

Apa yang diposting Dr1Ku berfungsi. Digunakan kode hari ini tetapi perlu menambahkan lebih banyak lok. Jadi, inilah beberapa peningkatan:

Opsional: Alih-alih menggunakan String LocationManager.GPS_PROVIDER, Anda mungkin ingin menentukan PROVIDER_NAME constat Anda sendiri dan menggunakannya. Saat mendaftar untuk pembaruan lokasi, pilih penyedia melalui kriteria alih-alih langsung menentukannya sebagai string.

Pertama: Alih-alih memanggil removeTestProvider, periksa terlebih dahulu apakah ada penyedia yang akan dihapus (untuk menghindari IllegalArgumentException):

if (mLocationManager.getProvider(PROVIDER_NAME) != null) {
  mLocationManager.removeTestProvider(PROVIDER_NAME);
}

Kedua: Untuk mempublikasikan lebih dari satu lokasi, Anda harus mengatur waktu untuk lokasi:

newLocation.setTime(System.currentTimeMillis());
...
mLocationManager.setTestProviderLocation(PROVIDER_NAME, newLocation);

Tampaknya juga ada Uji google yang menggunakan MockLocationProviders: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/location/LocationManagerProximityTest.java

Contoh kerja bagus lainnya dapat ditemukan di: http://pedroassuncao.com/blog/2009/11/12/android-location-provider-mock/

Artikel bagus lainnya adalah: http://ballardhack.wordpress.com/2010/09/23/location-gps-and-automated-testing-on-android/#comment-1358 Anda juga akan menemukan beberapa kode yang benar-benar berfungsi untuk saya di emulator.


Saran keren tentang mendefinisikan Penyedia Anda sendiri, hal dengan menggunakan GPS_PROVIDER adalah bahwa Anda (tampaknya) tidak dapat menyingkirkan penyedia tiruan (lebih tepatnya, Anda tidak dapat beralih ke GPS normal) hingga reboot. Pos yang luar biasa juga, saya akan memeriksa referensi!
Dr1Ku

@ Dr1KU Apakah masih Anda tidak dapat kembali ke GPS normal? Apakah itu ditentukan di suatu tempat?
Kaz Dragon

@KazDragon Itulah yang terjadi saat itu. Dari apa yang saya ingat, setelah menyalakannya Mock Provider, GPS normal tidak akan berfungsi, saya tidak bisa memperbaiki (saya sedang menguji langsung pada perangkat). Ini mungkin tidak terjadi karena banyak yang telah terjadi di Android sejak itu.
Dr1Ku

@ Dr1Ku Ah, well, saya melakukan sesuatu yang sangat mirip sekarang dan menerima hasil yang serupa dengan yang Anda gambarkan. Saya berharap untuk mengetahui apakah ini adalah pembatasan yang dibangun ke platform atau bahwa saya baru saja kehilangan panggilan fungsi di suatu tempat. Saya mungkin harus mengajukan pertanyaan tentang ini.
Kaz Dragon

9

Ada aplikasi yang tersedia di Android Market yang memungkinkan Anda menentukan "Lokasi GPS Mock" untuk perangkat Anda.

Saya mencari https://market.android.com dan menemukan aplikasi bernama "Lokasi Palsu Saya" yang berfungsi untuk saya.

Penyedia Mock GPS yang disebutkan oleh Paul di atas (di http://www.cowlumbus.nl/forum/MockGpsProvider.zip ) adalah contoh lain yang menyertakan kode sumber - walaupun saya tidak dapat menginstal APK yang disediakan (katanya Kegagalan [INSTALL_FAILED_OLDER_SDK] dan mungkin hanya perlu dikompilasi ulang)

Untuk menggunakan lokasi tiruan GPS, Anda harus mengaktifkannya di pengaturan perangkat Anda. Buka Pengaturan -> Aplikasi -> Pengembangan dan centang "Izinkan lokasi palsu"

Anda kemudian dapat menggunakan aplikasi seperti yang dijelaskan di atas untuk mengatur koordinat GPS dan peta Google dan aplikasi lain akan menggunakan lokasi GPS tiruan yang Anda tentukan.


GPS palsu lebih sederhana. Saya hanya ingin tahu mengapa mereka meminta id penelepon dalam izin aplikasi: S
Guillaume Massé

8

Ini bekerja untuk saya (Android Studio):

Nonaktifkan pelacakan GPS dan WiFi di ponsel. Pada Android 5.1.1 dan di bawah, pilih "aktifkan lokasi tiruan" di Opsi Pengembang.

Buat salinan manifes Anda di direktori src / debug. Tambahkan yang berikut ke sana (di luar tag "aplikasi"):

menggunakan-izin android: name = "android.permission.ACCESS_MOCK_LOCATION"

Menyiapkan fragmen peta yang disebut "peta". Sertakan kode berikut di onCreate ():

lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
ll = new MyLocationListener();
if (lm.getProvider("Test") == null) {
    lm.addTestProvider("Test", false, false, false, false, false, false, false, 0, 1);
}
lm.setTestProviderEnabled("Test", true);
lm.requestLocationUpdates("Test", 0, 0, ll);

map.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
    @Override
    public void onMapClick(LatLng l) {
        Location loc = new Location("Test");
        loc.setLatitude(l.latitude);
        loc.setLongitude(l.longitude);
        loc.setAltitude(0); 
        loc.setAccuracy(10f);
        loc.setElapsedRealtimeNanos(System.nanoTime());
        loc.setTime(System.currentTimeMillis()); 
        lm.setTestProviderLocation("Test", loc);
    }
};

Perhatikan bahwa Anda mungkin harus sementara meningkatkan "minSdkVersion" di file gradle modul Anda menjadi 17 untuk menggunakan metode "setElapsedRealtimeNanos".

Sertakan kode berikut di dalam kelas aktivitas utama:

private class MyLocationListener implements LocationListener {
    @Override
    public void onLocationChanged(Location location) {
        // do whatever you want, scroll the map, etc.
    }
}

Jalankan aplikasi Anda dengan AS. Di Android 6.0 dan di atasnya Anda akan mendapatkan pengecualian keamanan. Sekarang pergi ke Opsi Pengembang di Pengaturan dan pilih "Pilih aplikasi lokasi mock". Pilih aplikasi Anda dari daftar.

Sekarang ketika Anda mengetuk peta, onLocationChanged () akan memecat dengan koordinat keran Anda.

Saya baru saja memikirkan hal ini jadi sekarang saya tidak perlu menginjak-injak lingkungan dengan telepon di tangan.


Saya pikir itu bekerja di Android 6 jika Anda menempatkan kode ini dalam layanan
Hamza

7

Saya telah membuat Handler sederhana yang mensimulasikan posisi bergerak dari posisi awal.

Mulai di panggilan balik koneksi Anda:

private final GoogleApiClient.ConnectionCallbacks mConnectionCallbacks = new GoogleApiClient.ConnectionCallbacks() {
    @Override
    public void onConnected(Bundle bundle) {
        if (BuildConfig.USE_MOCK_LOCATION) {
            LocationServices.FusedLocationApi.setMockMode(mGoogleApiClient, true);
            new MockLocationMovingHandler(mGoogleApiClient).start(48.873399, 2.342911);
        }
    }

    @Override
    public void onConnectionSuspended(int i) {

    }
};

Kelas Handler:

   private static class MockLocationMovingHandler extends Handler {

    private final static int SET_MOCK_LOCATION = 0x000001;
    private final static double STEP_LATITUDE =  -0.00005;
    private final static double STEP_LONGITUDE = 0.00002;
    private final static long FREQUENCY_MS = 1000;
    private GoogleApiClient mGoogleApiClient;
    private double mLatitude;
    private double mLongitude;

    public MockLocationMovingHandler(final GoogleApiClient googleApiClient) {
        super(Looper.getMainLooper());
        mGoogleApiClient = googleApiClient;
    }

    public void start(final double initLatitude, final double initLongitude) {
        if (hasMessages(SET_MOCK_LOCATION)) {
            removeMessages(SET_MOCK_LOCATION);
        }
        mLatitude = initLatitude;
        mLongitude = initLongitude;
        sendEmptyMessage(SET_MOCK_LOCATION);
    }

    public void stop() {
        if (hasMessages(SET_MOCK_LOCATION)) {
            removeMessages(SET_MOCK_LOCATION);
        }
    }

    @Override
    public void handleMessage(Message message) {
        switch (message.what) {
            case SET_MOCK_LOCATION:
                Location location = new Location("network");
                location.setLatitude(mLatitude);
                location.setLongitude(mLongitude);
                location.setTime(System.currentTimeMillis());
                location.setAccuracy(3.0f);
                location.setElapsedRealtimeNanos(System.nanoTime());
                LocationServices.FusedLocationApi.setMockLocation(mGoogleApiClient, location);

                mLatitude += STEP_LATITUDE;
                mLongitude += STEP_LONGITUDE;
                sendEmptyMessageDelayed(SET_MOCK_LOCATION, FREQUENCY_MS);
                break;
        }
    }
}

Semoga bisa membantu ..


6

Solusi yang disebutkan oleh icyerasor dan disediakan oleh Pedro di http://pedroassuncao.com/blog/2009/11/12/android-location-provider-mock/ bekerja sangat baik untuk saya. Namun, ia tidak menawarkan dukungan untuk memulai, menghentikan, dan memulai kembali penyedia GPS tiruan dengan benar.

Saya telah sedikit mengubah kodenya dan menulis ulang kelas menjadi AsyncTask alih-alih sebuah Thread. Ini memungkinkan kami untuk berkomunikasi dengan Utas UI, sehingga kami dapat memulai ulang penyedia pada titik di mana kami berada ketika kami menghentikannya. Ini sangat berguna ketika orientasi layar berubah.

Kode, bersama dengan proyek sampel untuk Eclipse, dapat ditemukan di GitHub: https://github.com/paulhoux/Android-MockProviderGPS

Semua kredit harus diberikan kepada Pedro untuk melakukan sebagian besar kerja keras.


6

Tambahkan ke manifes Anda

<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"
    tools:ignore="MockLocation,ProtectedPermissions" />

Fungsi lokasi tiruan

void setMockLocation() {
    LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    locationManager.addTestProvider(LocationManager.GPS_PROVIDER, false, false,
            false, false, true, true, true, 0, 5);
    locationManager.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true);

    Location mockLocation = new Location(LocationManager.GPS_PROVIDER);
    mockLocation.setLatitude(-33.852);  // Sydney
    mockLocation.setLongitude(151.211);
    mockLocation.setAltitude(10);
    mockLocation.setAccuracy(5);
    mockLocation.setTime(System.currentTimeMillis());
    mockLocation.setElapsedRealtimeNanos(System.nanoTime());
    locationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER, mockLocation);
}

Anda juga harus mengaktifkan lokasi tiruan di pengaturan pengembang perangkat Anda. Jika itu tidak tersedia, setel "mock location application" ke aplikasi Anda setelah penerapan di atas.


3

Aplikasi GPS palsu dari google play membantu saya. Pastikan Anda membaca semua petunjuk dalam deskripsi aplikasi. Anda harus menonaktifkan layanan lokasi lain serta memulai aplikasi Anda setelah Anda mengaktifkan "GPS Palsu". Bekerja sangat baik untuk apa yang saya butuhkan.

Berikut ini tautan ke aplikasi di GooglePlay: GPS Palsu




2

Saya menulis Aplikasi yang menjalankan WebServer (Seperti REST) ​​di Ponsel Android Anda, sehingga Anda dapat mengatur posisi GPS dari jarak jauh . Situs web ini menyediakan Peta yang dapat Anda klik untuk mengatur posisi baru, atau gunakan tombol "wasd" untuk bergerak ke arah mana pun. Aplikasi ini adalah solusi cepat sehingga hampir tidak ada UI atau Dokumentasi, tetapi implementasinya lurus ke depan dan Anda dapat melihat semuanya dalam (hanya empat) kelas.

Repositori proyek: https://github.com/juliusmh/RemoteGeoFix


1

Jika perangkat Anda dicolokkan ke komputer Anda dan Anda mencoba mengubah mengirim tali GPS Melalui kontrol Emulator, itu tidak akan berfungsi.
Ini adalah kontrol EMULATOR karena suatu alasan.
Cukup atur untuk memperbarui Anda tentang perubahan GPS.

lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);  

    ll = new LocationListener() {        
        public void onLocationChanged(Location location) {  
          // Called when a new location is found by the network location provider.  
            onGPSLocationChanged(location); 
        }

        public void onStatusChanged(String provider, int status, Bundle extras) {       
            bigInfo.setText("Changed "+ status);  
        }

        public void onProviderEnabled(String provider) {
            bigInfo.setText("Enabled "+ provider);
        }

        public void onProviderDisabled(String provider) {
            bigInfo.setText("Disabled "+ provider);
        }
      };

Ketika GPS diperbarui, tulis ulang metode berikut untuk melakukan apa yang Anda inginkan;

public void onGPSLocationChanged(Location location){  
if(location != null){  
    double pLong = location.getLongitude();  
    double pLat = location.getLatitude();  
    textLat.setText(Double.toString(pLat));  
    textLong.setText(Double.toString(pLong));  
    if(autoSave){  
        saveGPS();  
        }
    }
}

Jangan lupa letakkan ini di manifes
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_MOCK_LOCATION


0

Saya ingin tahu apakah Anda memerlukan pengaturan Lokasi Mock yang rumit. Dalam kasus saya begitu saya mendapatkan lokasi perbaikan, saya memanggil fungsi untuk melakukan sesuatu dengan lokasi baru itu. Dalam penghitung waktu, buat lokasi tiruan. Dan panggil fungsi dengan lokasi itu saja. Mengetahui semua itu dalam waktu singkat GPS akan datang dengan lokasi aktual saat ini. Tidak apa-apa. Jika Anda memiliki waktu pembaruan yang ditetapkan cukup lama.


0

Mungkin ini bukan pendekatan 'programmer', tetapi jika Anda ingin menghemat waktu dan mendapatkan solusi yang berfungsi, cobalah salah satu aplikasi yang didedikasikan untuk lokasi palsu yang tersedia di Google Play:

Spoofer Lokasi GPS Palsu

Lokasi Mock

Lokasi GPS palsu


1
Apakah Anda mencobanya? Apakah mereka berfungsi seperti yang diminta dalam pertanyaan?
arekolek

Ada preferensi? Atau apakah orang membutuhkan semuanya? : P
arekolek

Spoofer Lokasi GPS Palsu cukup baik, tetapi Lokasi Mock memungkinkan untuk mengatur rute yang merupakan fitur yang bagus.
klimat


0

Gunakan izin ini dalam file manifes

<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION">

android studio akan merekomendasikan bahwa "Lokasi mock hanya boleh diminta dalam file manifes uji atau debug khusus (biasanya src / debug / AndroidManifest.xml)" cukup nonaktifkan inspeksi

Sekarang pastikan Anda telah memeriksa " Izinkan lokasi palsu " di pengaturan pengembang ponsel Anda

Gunakan LocationManager

locationManager.addTestProvider(mocLocationProvider, false, false,
                false, false, true, true, true, 0, 5);
locationManager.setTestProviderEnabled(mocLocationProvider, true);

Sekarang atur lokasi di mana pun Anda inginkan

Location mockLocation = new Location(mocLocationProvider); 
mockLocation.setLatitude(lat); 
mockLocation.setLongitude(lng); 
mockLocation.setAltitude(alt); 
mockLocation.setTime(System.currentTimeMillis()); 
locationManager.setTestProviderLocation( mocLocationProvider, mockLocation); 

0

Solusi di atas tidak bekerja untuk saya karena saya menguji pada perangkat Android dengan versi Google Play Services terbaru yang menggunakan FusedLocationProviderClient . Setelah mengatur izin lokasi tiruan di manifes aplikasi dan aplikasi sebagai aplikasi lokasi tiruan yang ditentukan dalam pengaturan pengembang (seperti yang disebutkan dalam jawaban sebelumnya), saya kemudian menambahkan kode Kotlin di bawah ini yang berhasil mengejek lokasi.

locationProvider = FusedLocationProviderClient(context)
locationProvider.setMockMode(true)

val loc = Location(providerName)
val mockLocation = Location(providerName) // a string
mockLocation.latitude = latitude  // double
mockLocation.longitude = longitude
mockLocation.altitude = loc.altitude
mockLocation.time = System.currentTimeMillis()
mockLocation.accuracy = 1f
mockLocation.elapsedRealtimeNanos = SystemClock.elapsedRealtimeNanos()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    mockLocation.bearingAccuracyDegrees = 0.1f
    mockLocation.verticalAccuracyMeters = 0.1f
    mockLocation.speedAccuracyMetersPerSecond = 0.01f
}
//        locationManager.setTestProviderLocation(providerName, mockLocation)
locationProvider.setMockLocation(mockLocation)
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.