Wie kann ich meinen Standort auf einem physischen Gerät (Nexus One) verspotten? Ich weiß, dass Sie dies mit dem Emulator in der Emulator-Systemsteuerung tun können, aber dies funktioniert nicht für ein physisches Gerät.
Für Desktop-Computer können Sie Treiber erstellen / installieren, die ein GPS-Gerät / eine serielle Schnittstelle emulieren, um diese Art von Tests durchzuführen. Vielleicht könnten Sie etwas Ähnliches für Android erstellen oder finden.
AaronLS
6
Es gibt verschiedene Anwendungen auf dem Markt, die den GPS-Standort emulieren können. Zum Beispiel "Location Spoofer".
Es gibt eine Anwendung auf dem Markt namens "Fake GPS". Wenn Sie Mock Locations auf Ihrem Gerät aktivieren, bietet es eine schöne Benutzeroberfläche zum Festlegen Ihres Standorts. Mir ist klar, dass dies keine Do-it-yourself-Lösung ist, aber sicherlich eine würdige Lösung für schnelle Tests.
Tim Green
2
Dies kann der Link sein - das gleiche Datum und der relevante Inhalt.
DefenestrationDay
4
@ TimGreen Ihre sollte die akzeptierte Antwort sein (nicht nur ein Kommentar)! Bei weitem der einfachste Weg zu testen
Bostone
Tatsächlich ist die "Fake GPS" -Anwendung nicht die beste, da sie nur Standorte festlegen und sich zufällig bewegen kann. Ihre neue Version kann routen, aber sie iteriert nur über Wegpunkte, so große Sprünge in der Position. Janusz Antwort ist in der Tat richtig, dass Sie Ihren eigenen Mock-Provider erstellen müssen. Wir haben das kürzlich gemacht und wenn jemand es braucht oder wenn diese Frage noch Hilfe braucht, werde ich den Code posten.
Vkinra
5
Die Aussage "Geben Sie Ihren Code ein und erstellen Sie Ihren eigenen Anbieter für Scheinstandorte" sollte ausführlicher erläutert werden.
Dims
102
Wenn Sie dieses Telefon nur im Entwicklungslabor verwenden, besteht die Möglichkeit, dass Sie den GPS-Chip ablöten und die serielle Schnittstelle direkt mit NMEA-Sequenzen von anderen Geräten versorgen können.
Warum die Hasser? Diese Antwort ist unglaublich hart.
Ben Zotto
61
Super Hardcore, obwohl auch unglaublich nutzlos / irrelevant.
Olivervbk
13
Aber lustig genug.
Etienne
23
Ich denke, jeder, für den diese Antwort relevant wäre, weiß bereits, dass er dies tun kann. Ich bezweifle, dass diese drei Leute den Stackoverflow nach einer Lösung durchsuchen.
ToolmakerSteve
10
Wenn Sie Probleme haben, realistische NMEA-Sequenzen in Ihr nicht gelötetes Gerät zu generieren, gibt es eine großartige Option: Löten Sie dort ein tatsächliches externes GPS-Gerät und bewegen Sie das gesamte Entwicklungslabor auf einer tatsächlichen Strecke über einem Team von Läufern / Bikern / Autos / Flugzeuge / was auch immer, abhängig von der Geschwindigkeit, die Sie simulieren möchten. Vergessen Sie nicht, ein Loch im Dach des Entwicklungslabors zu öffnen, damit das Gerät Funksignale von Satelliten empfangen kann. Bitte. ;-)
Stéphane Gourichon
32
Ich wünschte, ich hätte mein Kabel zur Hand. Ich weiß, dass Sie mit dem Emulator telneten können, um seinen Speicherort zu ändern
$ telnet localhost 5554AndroidConsole: type 'help'for a list of commands
OK
geo fix -82.41162928.054553
OK
Ich kann mich nicht erinnern, ob Sie mit Ihrem Gerät telneten können, aber ich denke, Sie können. Ich hoffe das hilft.
Dazu benötigen Sie adb (Android Debugging Bridge) (CLI).
Sie erhalten eine Berechtigung für alles, was Sie als Befehl an die Konsole Ihres Geräts senden. Vielleicht ist es mit einer Terminal-Anwendung möglich, aber ich denke, das erfordert Root-Zugriff
Janusz
Nur damit wir auf der gleichen Seite sind: Sie sprechen nicht von "adb shell", oder? Was ich spreche, ist anders. Dies ist ein Setup, mit dem Sie androidspezifische Parameter einstellen können. Ich weiß zum Beispiel, dass Sie die Portweiterleitung (dh localhost: 1234 geht an Telefon: 1234) ohne Root-Zugriff einrichten können, sodass Sie einen SOCKS-Proxy und -Tunnel über ein Kabel ohne Root einrichten können.
Tim Green
Sie können adb forward tcp: 6000 tcp: 23 verwenden, um Port 6000 auf Ihrem Computer an Port 23 auf dem Gerät weiterzuleiten, aber ich konnte keine Verbindung herstellen, selbst wenn der Port als offen angezeigt wird. Die Verwendung eines Telnet-Clients auf dem Gerät und die Verbindung zu localhost schlägt ebenfalls fehl
Janusz
15
Dies funktioniert gut für den Emulator, aber nicht für ein tatsächliches Gerät. Es beantwortet also überhaupt nicht die Frage von OP :(
Matthew Gilliard
4
@ TimGreen Ihre Lösung ist nur für Emulator. Die Frage betraf das reale Gerät.
IgorGanapolsky
29
Sie können die Location Services-Berechtigung verwenden, um den Standort zu verspotten ...
"android.permission.ACCESS_MOCK_LOCATION"
und dann in Ihrem Java-Code,
// Set location by setting the latitude, longitude and may be the altitude...String[]MockLoc= str.split(",");Location location =newLocation(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);
Ich habe Erfolg mit dem folgenden Code gehabt. Obwohl ich aus irgendeinem Grund ein einziges Schloss bekam (auch wenn ich verschiedene LatLng-Paare ausprobiert habe), hat es bei mir funktioniert. mLocationManagerist ein, LocationManagerdas an ein angeschlossen ist LocationListener:
privatevoid 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 =newLocation(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
);}
Netter Beitrag, siehe meine Antwort unten für Ergänzungen.
icyerasor
Soweit ich mich erinnere, setTestProviderStatuswird hier verwendet, um ein Ereignis mit dem LocationManager zu benachrichtigen / zu veröffentlichen / zu planen, dass der GPS-Anbieter "jetzt" einen Fix gefunden hat, damit die Verarbeitung dieses Ereignisses erfolgen kann.
Dr1Ku
Was bedeutet " mLocationManagerist ein LocationManagerGerät, das an einen LocationListener angeschlossen ist"? Wie kann ich das machen? Vielen Dank ..
plus 1 für die Art und Weise, wie Sie die Wahren und Falschen in der Methode addTestProvider
A.Alqadomi
16
Was Dr1Ku gepostet hat, funktioniert. Habe den Code heute verwendet, musste aber weitere Locs hinzufügen. Hier sind einige Verbesserungen:
Optional: Anstatt die Zeichenfolge LocationManager.GPS_PROVIDER zu verwenden, möchten Sie möglicherweise Ihre eigene Konstante PROVIDER_NAME definieren und verwenden. Wählen Sie bei der Registrierung für Standortaktualisierungen einen Anbieter über Kriterien aus, anstatt ihn direkt als Zeichenfolge anzugeben.
Erstens: Anstatt removeTestProvider aufzurufen, prüfen Sie zunächst, ob ein Anbieter entfernt werden muss (um IllegalArgumentException zu vermeiden):
Cooler Vorschlag zur Definition Ihres eigenen Providers. Bei der Verwendung von GPS_PROVIDER können Sie den Scheinanbieter (anscheinend) erst nach einem Neustart loswerden (genauer gesagt, Sie können nicht zu normalem GPS wechseln). Super Beitrag auch, ich werde die Referenzen überprüfen!
Dr1Ku
@ Dr1KU Ist es immer noch so, dass Sie nicht zum normalen GPS zurückkehren können? Ist das irgendwo angegeben?
Kaz Dragon
@ KazDragon Das war damals der Fall. Soweit ich mich erinnern kann, Mock Providerfunktionierte das normale GPS nach dem Einschalten nicht, ich konnte keine Lösung finden (ich habe direkt auf einem Gerät getestet). Dies ist möglicherweise nicht der Fall, da seitdem in Android viel passiert ist.
Dr1Ku
@ Dr1Ku Ah, nun, ich mache jetzt etwas sehr Ähnliches und erhalte ähnliche Ergebnisse wie die von Ihnen beschriebenen. Ich hatte gehofft zu wissen, ob dies eine in die Plattform eingebaute Einschränkung war oder ob mir nur irgendwo ein Funktionsaufruf fehlte. Ich sollte wahrscheinlich eine Frage daraus machen.
Kaz Dragon
9
Im Android Market sind Apps verfügbar, mit denen Sie einen "Mock GPS Location" für Ihr Gerät angeben können.
Ich habe https://market.android.com gesucht und eine App namens "My Fake Location" gefunden, die für mich funktioniert.
Der von Paul oben erwähnte Mock-GPS-Anbieter (unter http://www.cowlumbus.nl/forum/MockGpsProvider.zip) ) ist ein weiteres Beispiel, das Quellcode enthält - obwohl ich die bereitgestellte APK nicht installieren konnte (dort steht Fehler) [INSTALL_FAILED_OLDER_SDK] und muss möglicherweise nur neu kompiliert werden.
Um GPS-Scheinstandorte verwenden zu können, müssen Sie diese in Ihren Geräteeinstellungen aktivieren. Gehen Sie zu Einstellungen -> Anwendungen -> Entwicklung und aktivieren Sie "Scheinspeicherorte zulassen".
Sie können dann eine App wie die oben beschriebenen verwenden, um GPS-Koordinaten festzulegen. Google Maps und andere Apps verwenden den von Ihnen angegebenen falschen GPS-Standort.
Gefälschtes GPS ist einfacher. Ich frage mich nur, warum sie in der App-Erlaubnis nach der Anrufer-ID fragen: S
Guillaume Massé
8
Das hat bei mir funktioniert (Android Studio):
Deaktivieren Sie die GPS- und WiFi-Verfolgung auf dem Telefon. Wählen Sie unter Android 5.1.1 und niedriger in den Entwickleroptionen "Scheinspeicherorte aktivieren" aus.
Erstellen Sie eine Kopie Ihres Manifests im Verzeichnis src / debug. Fügen Sie Folgendes hinzu (außerhalb des Tags "application"):
Verwendungsberechtigung android: name = "android.permission.ACCESS_MOCK_LOCATION"
Richten Sie ein Kartenfragment mit dem Namen "map" ein. Fügen Sie den folgenden Code in onCreate () ein:
Beachten Sie, dass Sie möglicherweise "minSdkVersion" in Ihrer Modul-Gradle-Datei vorübergehend auf 17 erhöhen müssen, um die Methode "setElapsedRealtimeNanos" verwenden zu können.
Fügen Sie den folgenden Code in die Hauptaktivitätsklasse ein:
privateclassMyLocationListenerimplementsLocationListener{@Overridepublicvoid onLocationChanged(Location location){// do whatever you want, scroll the map, etc.}}
Führen Sie Ihre App mit AS aus. Unter Android 6.0 und höher erhalten Sie eine Sicherheitsausnahme. Gehen Sie nun zu Entwickleroptionen in den Einstellungen und wählen Sie "Mock Location App auswählen". Wählen Sie Ihre App aus der Liste aus.
Wenn Sie jetzt auf die Karte tippen, wird onLocationChanged () mit den Koordinaten Ihres Tippens ausgelöst.
Ich habe das gerade herausgefunden, damit ich jetzt nicht mehr mit Telefonen in der Hand durch die Nachbarschaft stapfen muss.
Ich habe seinen Code ein wenig geändert und die Klasse so umgeschrieben, dass sie eine AsyncTask anstelle eines Threads ist. Auf diese Weise können wir mit dem UI-Thread kommunizieren, sodass wir den Anbieter an dem Punkt neu starten können, an dem wir ihn gestoppt haben. Dies ist praktisch, wenn sich die Bildschirmausrichtung ändert.
Sie müssen auch Scheinpositionen in den Entwicklereinstellungen Ihres Geräts aktivieren. Wenn dies nicht verfügbar ist, setzen Sie die "Mock Location Application" auf Ihre Anwendung, sobald die oben genannten implementiert wurden.
Gefälschte GPS-App von Google Play hat den Trick für mich getan. Stellen Sie einfach sicher, dass Sie alle Anweisungen in der App-Beschreibung gelesen haben. Sie müssen andere Ortungsdienste deaktivieren und Ihre App starten, nachdem Sie "Fake GPS" aktiviert haben. Arbeitete großartig für das, was ich brauchte.
Hier ist der Link zur App auf GooglePlay:
Fake GPS
Ich habe eine App geschrieben, die einen WebServer (REST-like) auf Ihrem Android-Telefon ausführt, damit Sie die GPS-Position aus der Ferne einstellen können . Die Website bietet eine Karte, auf die Sie klicken können, um eine neue Position festzulegen, oder die "Wasd" -Tasten verwenden können, um sich in eine beliebige Richtung zu bewegen. Die App war eine schnelle Lösung, daher gibt es fast keine Benutzeroberfläche oder Dokumentation, aber die Implementierung ist unkompliziert und Sie können alles in den (nur vier) Klassen nachschlagen.
Wenn Ihr Gerät an Ihren Computer angeschlossen ist und Sie versuchen, GPS-Kabel über die Emulator-Steuerung zu ändern, funktioniert dies nicht.
Dies ist aus einem bestimmten Grund eine EMULATOR-Steuerung.
Richten Sie es einfach so ein, dass Sie über GPS-Änderungen informiert werden.
lm =(LocationManager)getSystemService(Context.LOCATION_SERVICE);
ll =newLocationListener(){publicvoid onLocationChanged(Location location){// Called when a new location is found by the network location provider.
onGPSLocationChanged(location);}publicvoid onStatusChanged(String provider,int status,Bundle extras){
bigInfo.setText("Changed "+ status);}publicvoid onProviderEnabled(String provider){
bigInfo.setText("Enabled "+ provider);}publicvoid onProviderDisabled(String provider){
bigInfo.setText("Disabled "+ provider);}};
Wenn das GPS aktualisiert wird, schreiben Sie die folgende Methode neu, um das zu tun, was Sie möchten.
Ich frage mich, ob Sie das aufwändige Mock Location-Setup benötigen. In meinem Fall habe ich, sobald ich einen festen Speicherort erhalten habe, eine Funktion aufgerufen, um etwas mit diesem neuen Speicherort zu tun. Erstellen Sie in einem Timer einen Scheinort. Rufen Sie stattdessen die Funktion mit diesem Speicherort auf. Wenn Sie das alles in kurzer Zeit wissen, würde GPS einen realen aktuellen Standort ermitteln. Welches ist in Ordnung. Wenn Sie die Aktualisierungszeit ausreichend lang eingestellt haben.
Vielleicht ist es kein "Programmierer" -Ansatz, aber wenn Sie Zeit sparen und sofort eine funktionierende Lösung erhalten möchten, probieren Sie eine der Apps aus, die für den in Google Play verfügbaren Scheinstandort vorgesehen sind:
Hast du sie probiert? Haben sie wie in der Frage gefordert gearbeitet?
Arekolek
Irgendeine Präferenz? Oder braucht man alle? : P
Arekolek
Fake GPS Location Spoofer ist gut genug, aber Mock Locations ermöglicht das Festlegen einer Route, was eine nette Funktion ist.
klimat
0
Nutzen Sie den sehr praktischen und kostenlosen interaktiven Standortsimulator für Android-Telefone und -Tablets (CATLES). Es verspottet den GPS-Standort auf systemweiter Ebene (auch innerhalb der Google Maps- oder Facebook-Apps) und funktioniert sowohl auf physischen als auch auf virtuellen Geräten:
android studio empfiehlt, dass "Mock Location nur in einer Test- oder Debug-spezifischen Manifestdatei (normalerweise src / debug / AndroidManifest.xml) angefordert werden sollte". Deaktivieren Sie einfach die Überprüfung
Stellen Sie nun sicher, dass Sie in der Entwicklereinstellung Ihres Telefons die Option " Scheinspeicherorte zulassen " aktiviert haben
Die oben genannten Lösungen haben bei mir nicht funktioniert, da ich auf einem Android-Gerät mit der neuesten Google Play Services-Version getestet habe, die den FusedLocationProviderClient verwendet . Nachdem ich die Mock Location-Berechtigung im App-Manifest und die App als angegebene Mock Location-App in den Entwicklereinstellungen festgelegt hatte (wie in den vorherigen Antworten erwähnt), fügte ich den folgenden Kotlin-Code hinzu, der den Standort erfolgreich verspottete.
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)
Antworten:
Es scheint die einzige Möglichkeit zu sein, einen Scheinstandortanbieter zu verwenden.
Sie müssen in Ihren Einstellungen Scheinpositionen im Entwicklungsfenster aktivieren und hinzufügen
zu deinem Manifest.
Jetzt können Sie in Ihren Code Ihren eigenen Scheinstandortanbieter erstellen und den Standort dieses Anbieters festlegen.
quelle
Wenn Sie dieses Telefon nur im Entwicklungslabor verwenden, besteht die Möglichkeit, dass Sie den GPS-Chip ablöten und die serielle Schnittstelle direkt mit NMEA-Sequenzen von anderen Geräten versorgen können.
quelle
Ich wünschte, ich hätte mein Kabel zur Hand. Ich weiß, dass Sie mit dem Emulator telneten können, um seinen Speicherort zu ändern
Ich kann mich nicht erinnern, ob Sie mit Ihrem Gerät telneten können, aber ich denke, Sie können. Ich hoffe das hilft.
Dazu benötigen Sie adb (Android Debugging Bridge) (CLI).
quelle
Sie können die Location Services-Berechtigung verwenden, um den Standort zu verspotten ...
"android.permission.ACCESS_MOCK_LOCATION"
und dann in Ihrem Java-Code,
quelle
Ich habe Erfolg mit dem folgenden Code gehabt. Obwohl ich aus irgendeinem Grund ein einziges Schloss bekam (auch wenn ich verschiedene LatLng-Paare ausprobiert habe), hat es bei mir funktioniert.
mLocationManager
ist ein,LocationManager
das an ein angeschlossen istLocationListener
:quelle
setTestProviderStatus
wird hier verwendet, um ein Ereignis mit dem LocationManager zu benachrichtigen / zu veröffentlichen / zu planen, dass der GPS-Anbieter "jetzt" einen Fix gefunden hat, damit die Verarbeitung dieses Ereignisses erfolgen kann.mLocationManager
ist einLocationManager
Gerät, das an einen LocationListener angeschlossen ist"? Wie kann ich das machen? Vielen Dank ..LocationManager
Dienstes nach einem Standortwechsel suchen könnenLocationListener
: blog.doityourselfandroid.com/2010/12/25/…Was Dr1Ku gepostet hat, funktioniert. Habe den Code heute verwendet, musste aber weitere Locs hinzufügen. Hier sind einige Verbesserungen:
Optional: Anstatt die Zeichenfolge LocationManager.GPS_PROVIDER zu verwenden, möchten Sie möglicherweise Ihre eigene Konstante PROVIDER_NAME definieren und verwenden. Wählen Sie bei der Registrierung für Standortaktualisierungen einen Anbieter über Kriterien aus, anstatt ihn direkt als Zeichenfolge anzugeben.
Erstens: Anstatt removeTestProvider aufzurufen, prüfen Sie zunächst, ob ein Anbieter entfernt werden muss (um IllegalArgumentException zu vermeiden):
Zweitens: Um mehr als einen Standort zu veröffentlichen, müssen Sie die Zeit für den Standort festlegen:
Es scheint auch einen Google-Test zu geben, der MockLocationProviders verwendet: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/location/LocationManagerProximityTest.java
Ein weiteres gutes Arbeitsbeispiel finden Sie unter: http://pedroassuncao.com/blog/2009/11/12/android-location-provider-mock/
Ein weiterer guter Artikel ist: http://ballardhack.wordpress.com/2010/09/23/location-gps-and-automated-testing-on-android/#comment-1358 Sie finden auch Code, der tatsächlich funktioniert mich auf dem Emulator.
quelle
Mock Provider
funktionierte das normale GPS nach dem Einschalten nicht, ich konnte keine Lösung finden (ich habe direkt auf einem Gerät getestet). Dies ist möglicherweise nicht der Fall, da seitdem in Android viel passiert ist.Im Android Market sind Apps verfügbar, mit denen Sie einen "Mock GPS Location" für Ihr Gerät angeben können.
Ich habe https://market.android.com gesucht und eine App namens "My Fake Location" gefunden, die für mich funktioniert.
Der von Paul oben erwähnte Mock-GPS-Anbieter (unter http://www.cowlumbus.nl/forum/MockGpsProvider.zip) ) ist ein weiteres Beispiel, das Quellcode enthält - obwohl ich die bereitgestellte APK nicht installieren konnte (dort steht Fehler) [INSTALL_FAILED_OLDER_SDK] und muss möglicherweise nur neu kompiliert werden.
Um GPS-Scheinstandorte verwenden zu können, müssen Sie diese in Ihren Geräteeinstellungen aktivieren. Gehen Sie zu Einstellungen -> Anwendungen -> Entwicklung und aktivieren Sie "Scheinspeicherorte zulassen".
Sie können dann eine App wie die oben beschriebenen verwenden, um GPS-Koordinaten festzulegen. Google Maps und andere Apps verwenden den von Ihnen angegebenen falschen GPS-Standort.
quelle
Das hat bei mir funktioniert (Android Studio):
Deaktivieren Sie die GPS- und WiFi-Verfolgung auf dem Telefon. Wählen Sie unter Android 5.1.1 und niedriger in den Entwickleroptionen "Scheinspeicherorte aktivieren" aus.
Erstellen Sie eine Kopie Ihres Manifests im Verzeichnis src / debug. Fügen Sie Folgendes hinzu (außerhalb des Tags "application"):
Verwendungsberechtigung android: name = "android.permission.ACCESS_MOCK_LOCATION"
Richten Sie ein Kartenfragment mit dem Namen "map" ein. Fügen Sie den folgenden Code in onCreate () ein:
Beachten Sie, dass Sie möglicherweise "minSdkVersion" in Ihrer Modul-Gradle-Datei vorübergehend auf 17 erhöhen müssen, um die Methode "setElapsedRealtimeNanos" verwenden zu können.
Fügen Sie den folgenden Code in die Hauptaktivitätsklasse ein:
Führen Sie Ihre App mit AS aus. Unter Android 6.0 und höher erhalten Sie eine Sicherheitsausnahme. Gehen Sie nun zu Entwickleroptionen in den Einstellungen und wählen Sie "Mock Location App auswählen". Wählen Sie Ihre App aus der Liste aus.
Wenn Sie jetzt auf die Karte tippen, wird onLocationChanged () mit den Koordinaten Ihres Tippens ausgelöst.
Ich habe das gerade herausgefunden, damit ich jetzt nicht mehr mit Telefonen in der Hand durch die Nachbarschaft stapfen muss.
quelle
Ich habe einen einfachen Handler erstellt, der eine sich bewegende Position von einer Anfangsposition aus simuliert.
Starten Sie es in Ihrem Verbindungsrückruf:
Die Handler-Klasse:
Hoffe es kann helfen ..
quelle
Die von icyerasor erwähnte und von Pedro bei http://pedroassuncao.com/blog/2009/11/12/android-location-provider-mock/ bei mir sehr gut funktioniert. Es bietet jedoch keine Unterstützung für das ordnungsgemäße Starten, Stoppen und Neustarten des Schein-GPS-Anbieters.
Ich habe seinen Code ein wenig geändert und die Klasse so umgeschrieben, dass sie eine AsyncTask anstelle eines Threads ist. Auf diese Weise können wir mit dem UI-Thread kommunizieren, sodass wir den Anbieter an dem Punkt neu starten können, an dem wir ihn gestoppt haben. Dies ist praktisch, wenn sich die Bildschirmausrichtung ändert.
Der Code sowie ein Beispielprojekt für Eclipse finden Sie auf GitHub: https://github.com/paulhoux/Android-MockProviderGPS
Alle Ehre gebührt Pedro für die meiste harte Arbeit.
quelle
Fügen Sie Ihrem Manifest hinzu
Mock Location Funktion
Sie müssen auch Scheinpositionen in den Entwicklereinstellungen Ihres Geräts aktivieren. Wenn dies nicht verfügbar ist, setzen Sie die "Mock Location Application" auf Ihre Anwendung, sobald die oben genannten implementiert wurden.
quelle
Gefälschte GPS-App von Google Play hat den Trick für mich getan. Stellen Sie einfach sicher, dass Sie alle Anweisungen in der App-Beschreibung gelesen haben. Sie müssen andere Ortungsdienste deaktivieren und Ihre App starten, nachdem Sie "Fake GPS" aktiviert haben. Arbeitete großartig für das, was ich brauchte.
Hier ist der Link zur App auf GooglePlay: Fake GPS
quelle
Das Google-Tutorial dazu finden Sie hier. Es enthält Codebeispiele und erläutert den Vorgang.
http://developer.android.com/training/location/location-testing.html#SendMockLocations
quelle
Installieren Sie die gefälschte GPS-App https://play.google.com/store/apps/details?id=com.incorporateapps.fakegps.fre&hl=de
Entwickleroptionen -> Mock Location App auswählen (Mittelwert, Fake Location App ausgewählt).
Gefälschte GPS-App :
Doppelte Registerkarte auf der Karte zum Hinzufügen -> Klicken Sie auf die Wiedergabetaste -> Zeigen Sie den Toast "Gefälschter Ort gestoppt" an.
Überprüfen Sie schließlich mit Google Map Apps.
quelle
Ich habe eine App geschrieben, die einen WebServer (REST-like) auf Ihrem Android-Telefon ausführt, damit Sie die GPS-Position aus der Ferne einstellen können . Die Website bietet eine Karte, auf die Sie klicken können, um eine neue Position festzulegen, oder die "Wasd" -Tasten verwenden können, um sich in eine beliebige Richtung zu bewegen. Die App war eine schnelle Lösung, daher gibt es fast keine Benutzeroberfläche oder Dokumentation, aber die Implementierung ist unkompliziert und Sie können alles in den (nur vier) Klassen nachschlagen.
Projekt-Repository: https://github.com/juliusmh/RemoteGeoFix
quelle
Wenn Ihr Gerät an Ihren Computer angeschlossen ist und Sie versuchen, GPS-Kabel über die Emulator-Steuerung zu ändern, funktioniert dies nicht.
Dies ist aus einem bestimmten Grund eine EMULATOR-Steuerung.
Richten Sie es einfach so ein, dass Sie über GPS-Änderungen informiert werden.
Wenn das GPS aktualisiert wird, schreiben Sie die folgende Methode neu, um das zu tun, was Sie möchten.
Vergessen Sie nicht, diese in das Manifest
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_MOCK_LOCATION einzufügen
quelle
Ich frage mich, ob Sie das aufwändige Mock Location-Setup benötigen. In meinem Fall habe ich, sobald ich einen festen Speicherort erhalten habe, eine Funktion aufgerufen, um etwas mit diesem neuen Speicherort zu tun. Erstellen Sie in einem Timer einen Scheinort. Rufen Sie stattdessen die Funktion mit diesem Speicherort auf. Wenn Sie das alles in kurzer Zeit wissen, würde GPS einen realen aktuellen Standort ermitteln. Welches ist in Ordnung. Wenn Sie die Aktualisierungszeit ausreichend lang eingestellt haben.
quelle
Vielleicht ist es kein "Programmierer" -Ansatz, aber wenn Sie Zeit sparen und sofort eine funktionierende Lösung erhalten möchten, probieren Sie eine der Apps aus, die für den in Google Play verfügbaren Scheinstandort vorgesehen sind:
Gefälschter GPS-Standort-Spoofer
Scheinorte
Gefälschter GPS-Standort
quelle
Nutzen Sie den sehr praktischen und kostenlosen interaktiven Standortsimulator für Android-Telefone und -Tablets (CATLES). Es verspottet den GPS-Standort auf systemweiter Ebene (auch innerhalb der Google Maps- oder Facebook-Apps) und funktioniert sowohl auf physischen als auch auf virtuellen Geräten:
Website: http://ubicom.snet.tu-berlin.de/catles/index.html
Video: https://www.youtube.com/watch?v=0WSwH5gK7yg
quelle
Verwenden Sie diese Berechtigung in der Manifestdatei
android studio empfiehlt, dass "Mock Location nur in einer Test- oder Debug-spezifischen Manifestdatei (normalerweise src / debug / AndroidManifest.xml) angefordert werden sollte". Deaktivieren Sie einfach die Überprüfung
Stellen Sie nun sicher, dass Sie in der Entwicklereinstellung Ihres Telefons die Option " Scheinspeicherorte zulassen " aktiviert haben
Verwenden Sie LocationManager
Stellen Sie nun den Ort ein, wo immer Sie möchten
quelle
Die oben genannten Lösungen haben bei mir nicht funktioniert, da ich auf einem Android-Gerät mit der neuesten Google Play Services-Version getestet habe, die den FusedLocationProviderClient verwendet . Nachdem ich die Mock Location-Berechtigung im App-Manifest und die App als angegebene Mock Location-App in den Entwicklereinstellungen festgelegt hatte (wie in den vorherigen Antworten erwähnt), fügte ich den folgenden Kotlin-Code hinzu, der den Standort erfolgreich verspottete.
quelle