2010-08-03 7 views

Répondre

0

Lire un tutoriel sur Android location provider mock

+0

Je n'ai pas l'intention de fournir des données de localisation simulées pour ma propre application, mais pour avoir un LocationProvider supplémentaire pour toutes les autres applications sur le téléphone à choisir. –

+0

Ainsi, le tutoriel sur le "fournisseur de localisation Android" n'est pas utile. –

1

Cela ne peut pas être fait.

Le problème est que seuls les OEM sont autorisés à installer un nouveau fournisseur de localisation. Un développeur tiers ne peut pas accorder à son application l'autorisation requise pour installer un nouveau fournisseur d'emplacement (android.permission.INSTALL_LOCATION_PROVIDER).

Voir la réponse de Dianne Hackborn (ingénieur-cadre Android) dans ce fil:

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

Pour installer un nouveau fournisseur d'emplacement, vous devez développer un nouveau firmware entier (comme http://www.cyanogenmod.com/), insérez votre nouveau fournisseur d'emplacement dans ce firmware et installer tous ces trucs sur le téléphone de l'utilisateur.

Voir ce sujet SO, ainsi: Why are these permissions being refused?

Tout cela à cause des problèmes de sécurité.

+0

Est-ce possible sur un appareil enraciné? – JohnyTex

+1

@JohnyTex oui c'est possible sur l'appareil enraciné (ou rom personnalisé). Voir les instructions sur https://github.com/microg/android_packages_apps_UnifiedNlp –

6

À des fins de développement et de test, vous pouvez implémenter un fournisseur d'emplacement fictif. Vous devez activer "Autoriser les emplacements fictifs" dans les options du développeur afin que les applications puissent voir les emplacements de ce fournisseur.

Pour un exemple de code, regardez GPX Lecture:
https://github.com/johncarpenter/Android-GPX-Mock-Location-Provider

Le code d'enregistrement du fournisseur d'emplacement commence dans la ligne 203 du fichier android/src/com/twolinessoftware/android/PlaybackService.java. Si vous voulez un "vrai" fournisseur de localisation (par exemple pour déployer votre fonctionnalité dans une application utilisateur), certaines sources disent que cela ne peut être fait que si ce fournisseur est dans un paquet signé avec la clé du système, donc vous devez créer votre propre ROM à partir de la source, la signer avec votre clé, signer votre fournisseur de localisation avec la même clé et l'installer sur votre téléphone.

Cependant, Android a introduit des fournisseurs de localisation "dégroupés". Apparemment, ils en avaient besoin pour transférer leur propre NetworkLocationProvider du noyau Android dans le package Google Apps. Je n'ai pas encore vu de fournisseur de localisation dégroupé travaillant en pratique et je ne connais aucun code open source qui l'utilise, mais il semble que la version récente d'Android ait un support pour les fournisseurs de localisation "aftermarket".

code source pour la bibliothèque respective est à
https://github.com/CyanogenMod/android_frameworks_base/tree/cm-10.1/location/lib

Un fournisseur d'emplacement devrait étendre com.android.location.provider.LocationProviderBase.

Les classes et les méthodes sont documentées dans le code.

Edit: En regardant
https://github.com/android/platform_frameworks_base/blob/master/core/res/AndroidManifest.xml
à partir de la ligne 607, il semble que le niveau de protection pour l'autorisation INSTALL_LOCATION_PROVIDER est signatureOrSystem. Cela signifie que toute application qui utilise cette fonctionnalité (ie installe un fournisseur de localisation, pas nécessairement le fournisseur de locaion lui-même) devra soit être signée avec la même clé que la plate-forme (ce qui nécessiterait de construire votre système Android complet) ou être installé en tant qu'application système (ce qui peut fonctionner sur des périphériques enracinés).

Il y a un code à
https://github.com/microg/NetworkLocation
qui semble mettre en œuvre un LocationProvider. Je ne l'ai pas examiné en détail (encore) ou construit, donc je ne peux pas dire si cela fonctionne et ce qui est nécessaire pour cela. Mais peut-être que cela fournit des indications.

+0

Si je crée mon propre LocationProvider, comment l'enregistrer/l'installer? Je ne trouve rien dans le manifeste ... – JohnyTex

+1

Je ne l'ai jamais fait moi-même, mais il y a un fournisseur de localisation sur https://github.com/microg/android_packages_apps_UnifiedNlp. Cette application devrait avoir tout le code pour installer un fournisseur de localisation approprié. Si vous voulez essayer l'application, elle doit être installée en tant qu'application système (installez-la et déplacez-la dans le dossier de l'application système via Terminal ou adb) et nécessite au moins un backend, qui peut être une application utilisateur. – user149408

+0

Merci! Bien que cette lib semble manquer: https://github.com/android/platform_frameworks_base/tree/master/location/lib Où puis-je le trouver? Ai-je vraiment besoin de vérifier tout le repo? – JohnyTex

Questions connexes