2011-09-05 3 views
1

Je travaille sur une petite application, et l'une de nos exigences est de vérifier l'emplacement physique d'un utilisateur quand il a fait une activité particulière (Exemple: Une photo doit être prise près de la Tour Eiffel uniquementoffline coordonnées GPS accès - iPhone/Android

Maintenant, beaucoup de nos utilisateurs de smartphones peuvent ou non avoir accès aux données à cet instant précis.

Est-il possible d'aller chercher les utilisateurs Latitude et Longitude lorsqu'il est déconnecté (Pas de 3G/WiFi)?

Je suppose que l'application Cartes sur iPhone utilise la connectivité des données uniquement pour que Google Maps sous-jacent et l'iPhone OS aient toujours accès aux coordonnées GPS de l'appareil. S'il vous plaît laissez-moi savoir si j'ai raison ou faux ..

Je voudrais apprendre la même chose sur d'autres OS 's, par exemple: Android. Tous les liens/références seront très appréciés. MISE À JOUR: Je suis conscient que le GPS est une technologie basée sur les satellites et je suppose que cela ne devrait pas avoir de relation directe avec la connectivité Internet.

+0

Vous devez garder à l'esprit que iOS (et la plupart des combinés Android) utilisent A-GPS (GPS assisté), ce qui nécessite une connexion réseau.Sans connexion réseau, le retour d'un emplacement peut prendre un certain temps avec un degré de précision raisonnable. – lxt

+0

Hmmm .. Si cela prend du temps pour mon application de recueillir les données de localisation - Cela pourrait être un désactiver pour mes utilisateurs. Je serais intéressé de savoir combien il y a de différence de temps et si nous pouvons envoyer cela à un emploi de fond ou non? –

Répondre

1

Vous avez raison! Pour obtenir les informations de latitude et de longitude, les appareils utilisent le matériel GPS. Cela se fait sans connexion Internet. Ce dont vous avez besoin, c'est d'un signal GPS! Cependant, si vous êtes à l'intérieur de bâtiments où vous n'avez souvent pas de bons signaux GPS, l'iPhone essaie également de localiser l'appareil en utilisant les réseaux 3G et WIFI environnants.

Si vous souhaitez afficher ces coordonnées par exemple avec Google Maps, vous avez besoin d'une connexion Internet pour charger les cartes en fonction des coordonnées que vous avez. Aussi, pour récupérer des informations comme adresse, rue, etc. les appareils ont besoin d'un accès à internet pour rechercher les bases de données pour ce genre d'informations.

Exemple pour iOS:

import Fist #import<CoreLocation/CoreLocation.h> vous .H fichier. Ensuite, vous avez besoin du CLLocationManager.

- (IBAction)startSearchingLocation:(id)sender 
{ 
    //locationManager is ivar of CLLocationManager 
    self.locationManager = [[CLLocationManager alloc] init]; 
    //release it when you stop the location manager! 

    // make self the delegate of the location manager 
    [locationManager setDelegate:self]; 

    //Note that this settings will have a huge impact on battery life! 
    [locationManager setDistanceFilter:kCLDistanceFilterNone]; 
    [locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; 

    //And finally start the location manager. 
    [locationManager startUpdatingLocation]; 
} 

L'emplacement Manager commencer à envoyer des informations de localisation à une méthode de délégué appelé:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 

Il est recommandé de jeter les résultats très loin les premiers parce qu'ils pourraient être les anciennes données mises en cache. Vérifiez également l'exactitude pour vous assurer d'obtenir de bons résultats ici.

RÉFÉRENCES:

Pour plus d'informations consultez la documentation this et this.

Jetez aussi un coup d'œil à l'exemple de code pomme nommé Locations.

+1

Eh bien, merci Braintiff !!! J'ai juste besoin de la latitude et de la longitude de l'appareil mobile pour le moment. La conversion lisible par un humain de [Lat, Lon] à [Street Address] sera effectuée par le backend de mon serveur - Ceci se déclenchera dès que l'utilisateur aura accès à la connectivité Internet et sera prêt à se synchroniser avec notre serveur. Génial! Merci beaucoup! –

0

Code thats fonctionne avec Android

private double[] getGPS() { 
     LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     List<String> providers = lm.getProviders(false); 

     /* Loop over the array backwards, and if you get an accurate location, then break out the loop*/ 
     Location l = null; 

     for (int i=providers.size()-1; i>=0; i--) { 
       l = lm.getLastKnownLocation(providers.get(i)); 
       if (l != null) break; 
     } 

     double[] gps = new double[2]; 
     if (l != null) { 
       gps[0] = l.getLatitude(); 
       gps[1] = l.getLongitude(); 
     } 
     return gps; 
} 
+0

Merci Mosh, ma question est, ça va fonctionner hors ligne? (Sans connectivité Internet?) –

+0

comme je sais que cela devrait fonctionner, 'lm.getProviders (faux);' 'false' signifie aussi les fournisseurs hors ligne, il' true' signifie en ligne seulement –

+0

vous n'avez pas besoin d'internet pour utiliser gps !!! –