2010-08-03 11 views

Antwort

0

ein Tutorial Lesen Sie mehr über Android location provider mock

+0

Ich beabsichtige nicht, Mock-location-Daten für eigene Anwendungen anzugeben, sondern , um einen zusätzlichen LocationProvider für alle anderen Anwendungen auf dem Telefon zur Auswahl zu haben. –

+0

Daher ist das Tutorial über den "Android Location Provider Mock" nicht hilfreich. –

1

Es kann nicht getan werden.

Das Problem ist, dass nur OEMs einen neuen Standortanbieter installieren dürfen. Ein Drittentwickler kann seiner Anwendung nicht die Berechtigung erteilen, einen neuen Standortanbieter zu installieren (android.permission.INSTALL_LOCATION_PROVIDER).

Siehe Antwort von Dianne Hackborn (Android Framework Ingenieur) in diesem Thread:

https://groups.google.com/d/topic/android-developers/OvCcdvO6jZY/discussion

einen neuen Standort Provider installieren Sie eine ganz neue Firmware (wie http://www.cyanogenmod.com/) entwickeln sollten, legen Sie Ihre neue Standort-Provider in dieser Firmware und installieren Sie alle diese Sachen auf dem Telefon des Benutzers.

Sehen Sie diese SO fädeln, aber auch: Why are these permissions being refused?

All dies wegen Sicherheitsbedenken.

+0

Ist es auf einem gerooteten Gerät möglich? – JohnyTex

+1

@JohnyTex ja ist es möglich, auf gerooteten Gerät (oder benutzerdefinierte ROM). Siehe Anweisungen unter https://github.com/microg/android_packages_apps_UnifiedNlp –

6

Zu Entwicklungs- und Testzwecken können Sie einen Mock Location Provider implementieren. Sie müssen in den Entwickleroptionen "Zulässige Standorte zulassen" aktivieren, damit Anwendungen Standorte von diesem Anbieter sehen können.

Ein Codebeispiel, schauen GPX-Wiedergabe:
https://github.com/johncarpenter/Android-GPX-Mock-Location-Provider

Der Code den Standort-Anbieter für die Registrierung beginnt in Zeile 203 der Datei android/src/com/twolinessoftware/android/PlaybackService.java.

Wenn Sie einen "echten" Standortanbieter wünschen (z. B. um Ihre Funktionalität als Teil einer Endanwenderanwendung bereitzustellen), sagen einige Quellen, dass dies nicht möglich ist, es sei denn, dieser Anbieter ist in einem Paket mit dem Systemschlüssel signiert Sie müssten Ihr eigenes ROM aus der Quelle erstellen, es mit Ihrem Schlüssel signieren, Ihren Standortanbieter mit dem gleichen Schlüssel unterschreiben und beide auf Ihrem Telefon installieren.

Allerdings führte Android irgendwann "entbündelte" Standortanbieter ein. Anscheinend brauchten sie das, um ihren eigenen NetworkLocationProvider vom Android-Kern in das Google Apps-Paket zu verschieben.

Ich habe noch nicht gesehen, wie ein entbündelter Standortanbieter in der Praxis funktioniert, und mir ist kein Open-Source-Code bekannt, aber die aktuelle Version von Android scheint Unterstützung für Aftermarket-Standortanbieter zu bieten.

Quellcode für die jeweilige Bibliothek ist bei
https://github.com/CyanogenMod/android_frameworks_base/tree/cm-10.1/location/lib

Ein Standort-Anbieter com.android.location.provider.LocationProviderBase verlängern würde.

Klassen und Methoden sind im Code dokumentiert.

Edit: Mit Blick auf
https://github.com/android/platform_frameworks_base/blob/master/core/res/AndroidManifest.xml
ab Zeile 607, es sieht aus wie das Schutzniveau für die INSTALL_LOCATION_PROVIDER Erlaubnis ist signatureOrSystem. Dies bedeutet, dass jede App, die diese Funktion verwendet (dh einen Standortanbieter installiert, nicht unbedingt den Standortanbieter selbst), mit demselben Schlüssel wie die Plattform signiert werden müsste (dazu müssten Sie Ihr gesamtes Android-System aus der Quelle erstellen). oder als Systemanwendung installiert werden (was auf gerooteten Geräten funktionieren könnte).

Es ist ein Code bei
https://github.com/microg/NetworkLocation
, die eine LocationProvider umzusetzen scheint. Ich habe es noch nicht im Detail angeschaut oder gebaut, also kann ich nicht sagen, ob es funktioniert und was dafür nötig ist. Aber vielleicht gibt es ein paar Hinweise.

+0

Wenn ich meinen eigenen LocationProvider erstelle, wie registriere/installiere ich ihn? Ich kann nichts im Manifest finden ... – JohnyTex

+1

Ich habe das nie selbst gemacht, aber es gibt einen benutzerdefinierten Standortanbieter unter https://github.com/microg/android_packages_apps_UnifiedNlp. Diese App sollte den gesamten Code zum Installieren eines richtigen Standortanbieters enthalten. Wenn Sie die App ausprobieren möchten, muss sie als System-App installiert werden (installieren Sie sie einfach und verschieben Sie sie über Terminal oder adb in den System-App-Ordner) und benötigt mindestens ein Backend, bei dem es sich um eine Userspace-App handeln kann. – user149408

+0

Danke! Obwohl diese Lib scheint zu fehlen: https://github.com/android/platform_frameworks_base/tree/master/location/lib Wo kann ich es finden? Muss ich wirklich das gesamte Repo überprüfen? – JohnyTex

Verwandte Themen