2010-08-06 5 views
5

Je suis sur le point de construire une application sur Android qui servira de carte d'accès pour les employés sur la route. Au début d'un travail, l'utilisateur cliquera sur un bouton qui enregistrera l'emplacement GPS et l'heure actuelle (vérifiant ainsi où il se trouve à un moment donné) et à la fin du travail qu'il a enregistré. l'heure et l'emplacement GPS. Je pense que ce sera assez facile, sauf que je ne trouve pas un moyen de tirer les données de localisation actuelles. Le plus proche que je peux trouver est onLocationChanged ce qui implique que je ne peux pas obtenir une lecture GPS stationnaire. Je sais que cela doit être possible, mais je ne trouve pas d'exemple concret de la façon dont cela serait réalisé.Comment puis-je obtenir l'emplacement GPS actuel?

Répondre

3

Après un peu de recherche ce que je suis venu avec:

public class UseGps extends Activity 
{ 
    Button gps_button; 
    TextView gps_text; 
    LocationManager mlocManager; 

    /** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     gps_button = (Button) findViewById(R.id.GPSButton); 
     gps_text = (TextView) findViewById(R.id.GPSText); 

     gps_button.setOnClickListener(new OnClickListener() { 
      public void onClick(View viewParam) { 
       gps_text.append("\n\nSearching for current location. Please hold..."); 
       gps_button.setEnabled(false); 
       mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
       LocationListener mlocListener = new MyLocationListener(); 
       mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener); 
      } 
     }); 
    } 

    /* Class My Location Listener */ 
    public class MyLocationListener implements LocationListener 
    { 
     @Override 
     public void onLocationChanged(Location loc) 
     { 
      double lon = loc.getLatitude(); 
      double lat = loc.getLongitude(); 
      gps_text.append("\nLongitude: "+lon+" - Latitude: "+lat); 
      UseGps.this.mlocManager.removeUpdates(this); 
      gps_button.setEnabled(true); 
     } 

     @Override 
     public void onProviderDisabled(String provider) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void onProviderEnabled(String provider) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
      // TODO Auto-generated method stub 
     } 
    } 
} 

Ceci met en place une activité avec un bouton et textview. Définissez un écouteur sur le bouton qui lance le gestionnaire de position.

J'ai mis en place une classe, MyLocationListener, qui met en œuvre LocationListener, puis-je remplacer la méthode onLocationChanged(), dire au fond, ce que le premier emplacement, il obtient l'ajoute au textview puis il supprime le gestionnaire de l'emplacement.

Merci à ceux qui ont aidé et j'espère que cela sera utile à quelqu'un d'autre.

1

Vous devriez essayer de android.location.LocationManager.getLastKnownLocation

Et vérifier le temps de l'emplacement de retour en utilisant Location.getTime(utc time).

+1

ok, et excusez mon ignorance, mais lastKnownLocation dosnt impliquent mon emplacement actuel en ce moment .. Je veux l'application pour aller chercher mon emplacement dès que j'appuie sur le bouton, n'est-il pas possible que le dernier lieu connu est arrivé un il y a une demi-heure 2 miles de retour sur la route? –

+0

puis onLocationChanged est le meilleur moyen d'obtenir la position la plus à jour. – david

+0

Mais c'est mon point, que faire si je suis stationnaire et que je veux obtenir la position que je suis actuellement? Y a-t-il un moyen d'initialiser ma position, disons 0 0, qui déclencherait alors un changement de lieu? –

0

Demander des mises à jour de position et créer un LocationListener (voir LocationManager.requestLocationUpdates). Vous recevrez des mises à jour régulières avec des informations sur l'exactitude. Jusqu'à ce que vous obteniez votre première mise à jour, vous pouvez (comme indiqué) utiliser LocationManager.getLastLocation() et vérifier son horodatage et sa précision. Avertissement: certains scannages de périphériques prennent une éternité pour vous permettre une lecture précise, et ce, de manière totalement aléatoire.

+0

ok, donc je quelque chose comme ça alors .. cliquez sur le bouton de démarrage et et obtenir un horodatage, et fondamentalement continuer à interroger la dernière localisation jusqu'à ce que je reçois un emplacement avec un horodatage supérieur à mon horodateur de départ .. Je dois dire, Je ne peux pas croire qu'il n'y a pas un moyen de faire un contrôle sur place. L'appareil que j'utilise est assez rapide pour obtenir ma position lorsque j'utilise google maps ou le navigateur ... –

+0

Ne pas interroger lastKnown! Regardez la dernière fois connue et demandez les mises à jour comme indiqué ci-dessus. Si cela change, vous serez averti. Si ça ne change pas, lastKnown ne changera pas non plus! – EboMike

+0

Ok, je ne veux vraiment pas paraître paresseux, mais j'apprends mieux par l'exemple, donc sur cette note est-il possible que vous (ou quelqu'un d'autre) pouvez poster un exemple de code? –

Questions connexes