Dans mon application, j'ai des objets avec des positions GPS. Pour le moment, la seule chose que je fais avec eux est de les montrer sur une carte, mais je prévois d'implémenter d'autres fonctionnalités qui nécessitent de connaître l'emplacement des utilisateurs. Je ne souhaite pas ajouter l'autorisation de localisation à mon application, car certains utilisateurs peuvent ne pas vouloir utiliser ces fonctionnalités.Partage du service système à partir d'un plugin pour éviter trop de demandes d'autorisation
Mon idée était d'avoir une apk séparée (une sorte de plugin) qui fournit uniquement l'application principale avec des informations de localisation de sorte que seul le plugin doit demander la permission de localisation.
Est-il possible de laisser le plugin partager un service système (le LocationManager) directement sans créer un service personnalisé avec une interface incompatible afin que l'application principale puisse utiliser le LocationManager du plugin. Cela permettrait d'utiliser des classes existantes comme MyLocationOverlay ou autres. L'application principale pourrait passer un ContextWrapper à ces classes comme ceci:
public static class LocationContext extends ContextWrapper {
public LocationContext(Context base) {
super(base);
}
@Override
public Object getSystemService(String name) {
if (name.equals(LOCATION_SERVICE)) {
// Return the LocationManager service of the plugin here...
}
return super.getSystemService(name);
}
}
Cela semble intéressant. En supposant que les deux fichiers APK ont le même processus et sharedUserId, pouvez-vous donner un exemple de la façon dont l'application principale peut obtenir le LocationManager? – Tom
Je l'ai testé et c'était plus simple que prévu: je viens de créer un projet vide, paramétrer android: sharedUserId et android: process au nom du package de mon application principale et ajouté une balise uses-permission aux plugins AndroidManifest.xml. Maintenant, l'application principale a toutes les permissions définies dans le plugin et a pu obtenir l'emplacement des utilisateurs. Donc, cette approche ne nécessite pas une seule ligne de code dans le plugin. – Tom
Google ne le recommande pas: http://stackoverflow.com/questions/6354035/two-android-applications-with-same-user-id/6354073#6354073 De même, vous rééditez l'application A, il a été démontré que les recommandations étaient erronées , car la nouvelle application A n'aura plus accès aux fichiers qu'elle a enregistrés sous son ID utilisateur d'origine - Android, au moins via la série 2.x, n'a pas changé automatiquement l'ID utilisateur des fichiers lorsque l'ID utilisateur de la application modifiée. – CommonsWare