La réponse courte est que vous devez faire une demande de localisation pour ledit fournisseur. Le fournisseur a besoin d'un endroit frais.
Longtemps est;
Le problème spécifique que j'ai est qu'ils utilisent le faux GPS pour se moquer d'un emplacement. Ils le désactivent avant de lancer mon application, mais lorsque mon application se lance et effectue l'appel ci-dessus, elle reçoit toujours le dernier emplacement fictif.
Dans des circonstances normales getLastKnownLocation
méthode renvoie l'emplacement mis en cache pour le fournisseur donné. Donc, obtenir l'emplacement simulé est prévu dans votre cas, car votre appareil n'a pas reçu emplacement frais encore
Note: Nous avons enlevé des options de développement en tant que fournisseur de GPS simulé et fait une force quit dessus. Nous l'avons même désinstallé. Donc, je suis certain que Android lui-même est toujours en cache la valeur fictive précédente et juste l'alimentation de mon application parce que le téléphone n'a pas bougé.
Ce qui est juste, parce que l'application de moqueur emplacement précédemment défini est mis en cache pour le fournisseur donné. Cela affecte tout le système. C'est pourquoi il n'est pas effacé après la désinstallation de l'application Mocker. Vous devez effectuer une demande de localisation pour le fournisseur ou redémarrer votre appareil.
En outre, parce qu'il n'y a pas de fournisseur fantaisie dans Options pour les développeurs, Android LocationManager signale l'emplacement faux en cache comme NOT moqué. Clairement un énorme bug.
Comment l'avez-vous testé?Tous les appareils se comportent comme ça lorsque vous testez? Peut-être que l'application moqueuse est installée en tant qu'application système, elle signale donc l'emplacement à LocationManager et vous dissimule?
Pour forcer le GPS à obtenir l'emplacement, vous pouvez facilement utiliser le code ci-dessous. La méthode onLocationChanged sera déclenchée par le matériel GPS.
Mais assurez-vous qu'une application de localisation fictives ne fonctionne pas à ce moment. Sinon, la méthode onLocationChanged sera déclenchée par l'application mocker!
private void requestLocation(){
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 0, 0, mListener);
}
private LocationListener mListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
// Previously mock location is cleared.
// getLastKnownLocation(LocationManager.GPS_PROVIDER); will not return mock location.
}
...
};
"La réponse courte est que vous devez effectuer une demande de localisation pour le fournisseur en question. Je fais cela en utilisant 'locationManager.getLastKnownLocation (LocationManager.GPS_PROVIDER);' mais il ne cesse de renvoyer la même valeur en cache. – Bungles
"Comment l'avez-vous testé? Tous les appareils se comportent comme ça lorsque vous testez?" Oui, tous les appareils. Désinstallez l'application Fake GPS et désactivez complètement les options de développement. Puis printf() la valeur de 'lastKnownLocation.isFromMockProvider()', qui me dit que l'emplacement est mocké. NOTE: Ceci est même après le redémarrage de notre application, qui videra et renouvellera l'abonnement de notre application aux services de localisation. – Bungles
En outre, AUCUNE de mes méthodes 'locationListener' n'a jamais été appelée pendant ou à la suite du changement de fournisseur GPS. Je trouve cela plus qu' impair parce qu'un fournisseur est désactivé (Faux GPS) et un autre est activé (Real GPS) pendant le changement. – Bungles