Cihazda Android sahte konum mu?


147

Konumumu fiziksel bir cihazda (Nexus One) nasıl alay edebilirim? Bunu Emulator Kontrol panelindeki emülatörle yapabileceğinizi biliyorum, ancak bu fiziksel bir cihaz için çalışmıyor.


Masaüstü bilgisayarlar için, bu tür bir test yapmak amacıyla bir GPS cihazını / seri port cihazını taklit eden sürücüler oluşturabilir / yükleyebilirsiniz. Belki android için benzer bir şey oluşturabilir veya bulabilirsiniz.
AaronLS

6
Market'te GPS konumunu taklit edebilen çeşitli uygulamalar vardır. Örneğin "Konum spoofer".
Vlad

Mağazada bunu yapan birçok uygulama var .. Bunu deneyebilirsiniz - play.google.com/store/apps/… ya da bu - play.google.com/store/apps/…
Yehuda

1
Ayrıca mağazada tıpkı emülatör gibi "geo fix" ve "geo nmea" komutlarını destekleyen bir uygulama var! play.google.com/store/apps/…
luv

@Iuv daha fazla açık kaynak github.com/luv/mockgeofix
Vlad

Yanıtlar:


166

Yapmanın tek yolu sahte bir konum sağlayıcı kullanmaktır.

Sahte konumların ayarlarınızdaki geliştirme panelinde etkinleştirilmesi ve

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

manifestinize.

Artık kodunuza girebilir ve kendi sahte konum sağlayıcınızı oluşturabilir ve bu sağlayıcının konumunu ayarlayabilirsiniz.


83
Piyasada "Sahte GPS" adlı bir uygulama var. Cihazınızda Sahte Konumları etkinleştirirseniz, konumunuzu ayarlamak için hoş bir GUI sunar. Bunun bir kendin yap çözümü değil, hızlı test için kesinlikle değerli bir çözüm olduğunun farkındayım.
Tim Green

2
bu , bağlantıyla aynı tarih ve alakalı içerik olabilir.
DefenestrationDay

4
@TimGreen seninki kabul edilen cevap olmalı (sadece bir yorum değil)! Test etmenin en kolay yolu
Bostone

Aslında "sahte gps" uygulaması en iyisi değildir çünkü sadece konumları ayarlayabilir ve rastgele hareket edebilir. Yeni sürümleri yönlendirilebilir, ancak yalnızca konumdaki noktalarda çok büyük atlamalar yapar. Janusz yanıtı gerçekten kendi sahte sağlayıcı oluşturmak için doğru. Son zamanlarda bunu yaptık ve herhangi birinin ihtiyacı varsa veya bu sorunun hala yardıma ihtiyacı varsa, kodu gönderirim.
vkinra

5
"Kodunuzu girin ve kendi sahte konum sağlayıcınızı oluşturun" ifadesi daha ayrıntılı olarak açıklanmalıdır.
Dims

102

Bu telefonu sadece geliştirme laboratuvarında kullanırsanız, GPS yongasını lehimleme ve seri bağlantı noktasını doğrudan diğer cihazlardan NMEA dizileriyle besleme şansınız vardır.


68
Neden nefret edenler? Bu cevap çok zor bir çekirdektir.
Ben Zotto

61
Awesomely hardcore rağmen awesomely yararsız / alakasız da.
olivervbk

13
Yine de yeterince eğlenceli.
etienne

23
um, bu cevabın alakalı olacağı herkesin bunu yapabileceğini zaten biliyor. Bu üç kişinin yığın çözümü için bir çözüm aradığından şüpheliyim.
19:23

10
Lehimsiz cihazınıza gerçekçi NMEA dizilerini nasıl oluşturacağınızı bulmakta sorun yaşıyorsanız, harika bir seçenek var: orada gerçek bir harici GPS cihazı lehimleyin ve tüm geliştirme laboratuvarını bir koşucu / bisikletçinin / ekibinin üstünde gerçek bir yolda taşıyın arabalar / uçaklar / ne olursa olsun hızını simüle etmek istediğiniz hıza bağlı olarak. Cihazın uydulardan radyo sinyalleri alabilmesi için geliştirme laboratuvarının çatısında bir delik açmayı unutmayın. Rica ederim. ;-)
Stéphane Gourichon

32

Keşke kablom kullanışlı olsaydı. Konumunu değiştirmek için emülatöre telnet yapabileceğinizi biliyorum

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

Cihazınıza telnet yapıp yapamayacağınızı hatırlayamıyorum, ancak yapabileceğinizi düşünüyorum. Umarım bu yardımcı olur.

Bunun için adb'ye (android hata ayıklama köprüsü) ihtiyacınız olacak (CLI).


cihazınızın konsoluna komut olarak gönderdiğiniz her şeye izin verilmedi. Belki bir terminal uygulaması ile mümkündür ama bu root erişimi gerektirir düşünüyorum
Janusz

Aynı sayfadayız: "adb shell" hakkında konuşmuyorsun değil mi? Bahsettiğim şey farklı, bu android'e özgü parametreleri ayarlamanıza izin veren bir şey. Örneğin, kök yönlendirmesi olmadan bağlantı noktası yönlendirme (yani localhost: 1234 telefona: 1234) kurabilir, böylece bir kablo olmadan kökten bir SOCKS proxy ve tünel kurabilirsiniz.
Tim Green

Makinenizdeki bağlantı noktası 6000'i aygıttaki bağlantı noktası 23'e yönlendirmek için adb forward tcp: 6000 tcp: 23 kullanabilirsiniz, ancak bağlantı noktası açık olarak gösterilse bile bağlanamadım. Cihazda bir telnet istemcisi kullanmak ve localhost'a bağlanmak da başarısız oluyor
Janusz

15
Bu, emülatör için iyi çalışır, ancak gerçek bir cihaz için çalışmaz. Bu yüzden OP'nin sorusuna hiç cevap vermiyor :(
Matthew Gilliard

4
@TimGreen Çözümünüz yalnızca emülatör içindir. Soru gerçek cihazla ilgiliydi.
IgorGanapolsky

29

Konumu taklit etmek için Konum Hizmetleri iznini kullanabilirsiniz ...

"android.permission.ACCESS_MOCK_LOCATION"

ve sonra java kodunuzda,

// 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
mocLocationProvider'ın değeri nedir?
Victor

ör. LocationManager.GPS_PROVIDER
enigma969

25

Aşağıdaki kod ile başarılı oldum. Bir nedenden dolayı bana tek bir kilit olsa da (farklı LatLng çiftlerini denesem bile), benim için çalıştı. mLocationManageraşağıdakilere bağlı LocationManagerolan bir 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
Güzel yazı, eklemeler için aşağıdaki cevabıma bakın.
icyerasor

Hatırladığım kadarıyla setTestProviderStatusburada, GPS sağlayıcısının bir söz konusu olayın işlenebilmesi için bir "şimdi" düzeltmesi bulduğu bir olayı LocationManager'a bildirmek / göndermek / planlamak için kullanılır.
Dr1Ku

" Bir LocationListener'a mLocationManagerbağlı bir LocationManagerolan" nedir? bunu nasıl yapabilirim? Thank you ..
Yehuda

LocationManagerHizmeti ve bir konum değişikliğini nasıl kontrol edeceğinizi açıklayan bir makale ve a LocationListener: blog.doityourselfandroid.com/2010/12/25/…
Dr1Ku

2
artı 1 addTestProvider
A.Alqadomi

16

Dr1Ku ne yayınladı çalışır. Kodu bugün kullandı, ancak daha fazla yer eklemek gerekiyordu. İşte bazı iyileştirmeler:

İsteğe bağlı: LocationManager.GPS_PROVIDER Dizesini kullanmak yerine, kendi constat PROVIDER_NAME öğenizi tanımlayıp kullanmak isteyebilirsiniz. Konum güncellemelerine kaydolurken, doğrudan bir dize olarak belirtmek yerine ölçütleri kullanarak bir sağlayıcı seçin.

İlk olarak: removeTestProvider'ı çağırmak yerine, kaldırılacak bir sağlayıcı olup olmadığını kontrol edin (IllegalArgumentException öğesinden kaçınmak için):

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

İkinci olarak: Birden fazla konum yayınlamak için konumun zamanını ayarlamanız gerekir:

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

Ayrıca MockLocationProviders kullanan bir Google Testi var gibi görünüyor: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/location/LocationManagerProximityTest.java

Başka bir iyi çalışma örneği şu adreste bulunabilir: http://pedroassuncao.com/blog/2009/11/12/android-location-provider-mock/

Başka bir iyi makale: http://ballardhack.wordpress.com/2010/09/23/location-gps-and-automated-testing-on-android/#comment-1358 Ayrıca gerçekten işe yarayan bazı kodlar da bulacaksınız beni emülatörde.


Kendi Sağlayıcınızı tanımlamakla ilgili harika bir öneri, GPS_PROVIDER'ı kullanmakla ilgili olan şey, (görünüşe göre) yeniden başlatılana kadar sahte sağlayıcıdan (daha tam olarak normal GPS'e geçemezsiniz) kurtulamayacağınızdır. Müthiş gönderi de, referansları kontrol edeceğim!
Dr1Ku

@ Dr1KU Normal GPS'e geri dönememeniz hala geçerli mi? Bu bir yerde mi belirtildi?
Kaz Ejderha

@KazDragon O zamanlar böyleydi. Hatırlayabildiğim kadarıyla, açtıktan sonra Mock Providernormal GPS çalışmaz, bir düzeltme alamadım (doğrudan bir cihazda test ediyordum). O zamandan beri Android'de çok şey olduğu için durum böyle olmayabilir.
Dr1Ku

@ Dr1Ku Ah, şimdi çok benzer bir şey yapıyorum ve tarif ettiklerinize benzer sonuçlar alıyorum. Bunun platforma yerleştirilmiş bir kısıtlama olup olmadığını veya bir yerlerde bir işlev çağrısını kaçırdığımı bilmeyi umuyordum. Muhtemelen bundan bir soru sormalıyım.
Kaz Dragon

9

Android Market'te, cihazınız için bir "Sahte GPS Konumu" belirtmenize olanak tanıyan uygulamalar vardır.

Https: //market.android.com'u aradım ve benim için çalışan "Sahte Konumum" adlı bir uygulama buldum.

Yukarıda Paul tarafından belirtilen Mock GPS Sağlayıcısı ( http://www.cowlumbus.nl/forum/MockGpsProvider.zip adresinde ), sağlanan APK'yı yükleyememiş olmama rağmen kaynak kodunu içeren başka bir örnektir. [INSTALL_FAILED_OLDER_SDK] ve yeniden derlemeniz gerekebilir)

GPS sahte konumlarını kullanmak için, cihaz ayarlarında etkinleştirmeniz gerekir. Ayarlar -> Uygulamalar -> Geliştirme'ye gidin ve "Sahte konumlara izin ver" i işaretleyin

Daha sonra GPS koordinatlarını ayarlamak için yukarıda açıklananlar gibi bir uygulama kullanabilirsiniz; Google haritaları ve diğer uygulamalar belirttiğiniz sahte GPS konumunu kullanır.


Sahte GPS daha basittir. Sadece neden uygulama izninde arayan kimliği istediğini merak ediyorum: S
Guillaume Massé

8

Bu benim için çalıştı (Android Studio):

Telefonda GPS ve WiFi izlemeyi devre dışı bırakın. Android 5.1.1 ve önceki sürümlerde, Geliştirici Seçeneklerinde "sahte konumları etkinleştir" i seçin.

Bildiriminizin bir kopyasını src / debug dizininde oluşturun. Aşağıdakini ekleyin ("uygulama" etiketinin dışında):

android kullanır: name = "android.permission.ACCESS_MOCK_LOCATION"

Bir harita oluşturun "map" adlı bir parça oluşturun. OnCreate () öğesine aşağıdaki kodu ekleyin:

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

"SetElapsedRealtimeNanos" yöntemini kullanmak için modül not dosyanızdaki "minSdkVersion" ı geçici olarak 17'ye yükseltmeniz gerekebileceğini unutmayın.

Ana etkinlik sınıfına aşağıdaki kodu ekleyin:

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

Uygulamanızı AS ile çalıştırın. Android 6.0 ve sonraki sürümlerde bir güvenlik istisnası alırsınız. Şimdi Ayarlar'daki Geliştirici Seçenekleri'ne gidin ve "Sahte konum uygulamasını seçin" i seçin. Listeden uygulamanızı seçin.

Şimdi haritaya dokunduğunuzda, onLocationChanged () dokunuşunuzun koordinatları ile tetiklenecektir.

Ben sadece anladım bu yüzden şimdi el telefonları ile mahalle etrafında ezmek zorunda değilim.


Bu kodu hizmete
Hamza

7

Başlangıç ​​konumundan hareket eden bir konumu simüle eden basit bir Handler oluşturdum.

Bağlantı geri aramanızda başlatın:

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

    }
};

Handler sınıfı:

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

Umarım yardımcı olabilir ..


6

Iicyerasor tarafından bahsedilen ve Pedro tarafından http://pedroassuncao.com/blog/2009/11/12/android-location-provider-mock/ adresinde sağlanan çözüm benim için çok iyi çalıştı. Ancak, sahte GPS sağlayıcısını düzgün bir şekilde başlatmak, durdurmak ve yeniden başlatmak için destek sunmaz.

Kodunu biraz değiştirdim ve sınıfı bir iş parçacığı yerine AsyncTask olarak yeniden yazdım. Bu, UI İş Parçacığı ile iletişim kurmamızı sağlar, böylece sağlayıcıyı durduğumuzda olduğumuz noktada yeniden başlatabiliriz. Bu, ekran yönü değiştiğinde kullanışlıdır.

Kod, Eclipse için örnek bir proje ile birlikte GitHub'da bulunabilir: https://github.com/paulhoux/Android-MockProviderGPS

Tüm krediler, zor işlerin çoğunu yapmak için Pedro'ya gitmelidir.


6

Manifestinize ekleyin

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

Sahte konum işlevi

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

Ayrıca, cihaz geliştirici ayarlarınızda sahte yerleri etkinleştirmeniz gerekir. Bu mevcut değilse, yukarıdaki uygulamalar uygulandıktan sonra "sahte konum uygulaması" nı uygulamanıza ayarlayın.


3

Google oyundan sahte GPS uygulaması benim için hile yaptı. Sadece uygulama açıklamasındaki tüm talimatları okuduğunuzdan emin olun. "Sahte GPS" özelliğini etkinleştirdikten sonra diğer konum hizmetlerini devre dışı bırakmanız ve uygulamanızı başlatmanız gerekir. İhtiyacım olan şey için harika çalıştı.

İşte GooglePlay'deki uygulama bağlantısı: Sahte GPS




2

Android Telefonunuzda bir WebServer (REST-Like) çalıştıran bir Uygulama yazdım, böylece GPS konumunu uzaktan ayarlayabilirsiniz . Web sitesi, üzerine yeni bir pozisyon ayarlamak için tıklayabileceğiniz veya herhangi bir yönde hareket etmek için "wasd" tuşlarını kullanabileceğiniz bir Harita sunuyor. Uygulama hızlı bir çözümdü, bu yüzden neredeyse hiç kullanıcı arayüzü veya Dokümantasyon yok, ancak uygulama basittir ve (sadece dört) sınıfta her şeyi arayabilirsiniz.

Proje deposu: https://github.com/juliusmh/RemoteGeoFix


1

Cihazınız bilgisayarınıza bağlıysa ve değiştirmeye çalışıyorsanız, GPS kablolarını Emulator kontrolü ile göndermeye çalıştığınızda çalışmaz.
Bu bir sebepten ötürü bir EMULATOR kontrolüdür.
Sadece GPS değişikliğinde sizi güncellemek için ayarlayın.

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

GPS güncellendiğinde, istediğiniz yöntemi yapmak için aşağıdaki yöntemi yeniden yazın;

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

Bunları
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_MOCK_LOCATION bildirimine koymayı unutmayın


0

Ayrıntılı Mock Location kurulumuna ihtiyacınız olup olmadığını merak ediyorum. Benim durumumda bir kez sabit bir konum var ben bu yeni konum ile bir şeyler yapmak için bir işlev çağırıyordu. Bir zamanlayıcıda sahte bir konum oluşturun. Ve bunun yerine işlevi bu konumla çağırın. Kısa bir süre içinde tüm bunları bilmek GPS gerçek bir güncel konuma gelecektir. Hangisi iyi. Güncelleme süreniz yeterince uzunsa.


0

Belki 'programcı' yaklaşımı değildir, ancak zaman kazanmak ve çalışma çözümü almak istiyorsanız, Google Play'de mevcut olan sahte konumlara adanmış uygulamalardan birini deneyin:

Sahte GPS Konum Spoofer

Sahte yerler

Sahte GPS konumu


1
Onları denedin mi? Soruda istendiği gibi çalıştılar mı?
arekolek

Tercihiniz var mı? Yoksa hepsine ihtiyaç var mı? : P
arekolek

Sahte GPS Konumu Spoofer yeterince iyidir, ancak Mock Locations güzel bir özellik olan bir rota belirlemenize izin verir.
klimat


0

Manifest dosyasında bu izni kullanın

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

android tavsiye edecektir stüdyo "Sahte konumu sadece bir test ya da ayıklama özgü manifest dosyasında talep edilmelidir (tipik src / debug / AndroidManifest.xml'sinde)" sadece muayene devre dışı

Şimdi , telefonunuzun geliştirici ayarında " Sahte konumlara izin ver " seçeneğini işaretlediğinizden emin olun .

LocationManager'ı kullan

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

Şimdi konumu istediğiniz yere ayarlayın

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

0

Yukarıdaki çözümler benim için işe yaramadı çünkü FusedLocationProviderClient kullanan en son Google Play Hizmetleri sürümüne sahip bir Android cihazında test yapıyordum . Uygulama bildiriminde ve uygulamada sahte konum iznini, geliştirici ayarlarında belirtilen sahte konum uygulaması olarak ayarladıktan sonra (önceki yanıtlarda belirtildiği gibi), daha sonra aşağıda başarıyla konum alay eden Kotlin kodunu ekledim.

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