Voir my answer about why you can't just "get" a GPS position pour un arrière-plan. Obtenir la position GPS une fois dans votre méthode onCreate() (avec des vérifications d'initialisation paresseuses pour voir si vous avez déjà la coordonnée GPS en cas d'appels multiples à onCreate()) peut ne pas être la bonne approche pour votre application, et pourrait causer votre application doit être fermée de force par le système d'exploitation Android.
Si vous avez déterminé que le dernier emplacement connu du périphérique est toujours suffisant pour votre application, l'appel à chaque fois que votre méthode onCreate() est appelée est correct car il n'a pas besoin d'utiliser les circuits GPS. Par conséquent, si le dernier emplacement connu est suffisant, demandez-le simplement à chaque fois que la méthode onCreate() est appelée et évitez la complexité des contrôles sof de type initialisation paresseux.Si le dernier emplacement connu n'est pas toujours suffisant pour votre application, vous ne pouvez pas attendre le correctif dans la méthode onCreate() car vous risquez de perdre trop longtemps le repère d'emplacement, ce qui force le système Android à forcer fermez votre application qui ne répond pas car elle n'est pas revenue de la méthode onCreate() à temps. A la place, vous devez lancer une tâche asynch en arrière-plan dans la méthode onCreate() (en vérifiant que cette tâche asynchrone n'est pas exécutée) qui commence à écouter les mises à jour de localisation jusqu'à ce qu'un correctif suffisant soit reçu et se souvienne de cet emplacement. arrêter les auditeurs de localisation et ainsi éteindre les circuits GPS. Utilisez le code suivant:
private MyAsynchGpsLocationListener mGpsListener = null;
public ... onCreate() {
if (mGpsListener == null) {
mGpsListener = new MyAsynchGpsLocationListener();
mGpsListener.start();
}
}
someMethod() {
if (mGpsListener != null) {
Location myLocation = mGpsListener.getLocation();
if (myLocation != null) {
// Do something with a "good enough" location
}
}
}
Je pense que j'ai aussi rencontré ce problème, et cela a à voir avec la façon dont vous avez lancé une autre activité (quelle que soit l'activité qui accepte Camera Intents). Je pense que ce qui se passe est normalement dans votre propre activité, seuls onStart() et onStop() sont appelés. mais je suppose que puisque votre application n'est pas temporairement la meilleure application, android décide d'appeler onCreate() la prochaine fois que votre application est en "focus". ** corrigez-moi si je me trompe ici, je ne fais que spéculer ** –
sur une autre note, êtes-vous sûr de vouloir obtenir l'emplacement GPS dans "onCreate()"? cela ressemble à quelque chose qui est plus d'un service d'arrière-plan, dans lequel vous vérifiez d'abord si vous avez déjà obtenu l'emplacement GPS. –
@DavidT. J'ai absolument besoin de l'emplacement GPS lors de la création de l'application car il doit enregistrer l'emplacement de l'utilisateur au moment où il commence à l'utiliser. – Neeta