web-dev-qa-db-fra.com

Créer une application de suivi GPS Android

Récemment, le développement de Android) était un passe-temps et je cherchais à développer une application permettant de rechercher et de suivre la position d’un utilisateur à l’aide de Google Maps.

Une fois que l'application dispose d'un verrou GPS, elle peut suivre leurs mouvements en traçant un itinéraire à l'aide d'une classe de superposition.

J'ai vu des applications similaires, telles que Mytracks, à code source ouvert, mais elles sont trop complexes pour moi pour le moment.

Idéalement, j'aimerais créer une application qui ressemble à ceci

Il est mon code ci-dessous sans les importations.

Ce que j'essaie de faire est de créer un tableau de géopoints. Chaque fois que l'emplacement change, un nouveau géopoint est créé. J'essaie ensuite d'utiliser une boucle for pour parcourir chaque géopoint et tracer un chemin entre eux.

public class Tracking extends MapActivity implements LocationListener {

LocationManager locman;
LocationListener loclis;
Location Location;
private MapView map;

List<GeoPoint> geoPointsArray = new ArrayList<GeoPoint>();
private MapController controller;
String provider = LocationManager.GPS_PROVIDER;
double lat;
double lon;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.map);
    initMapView();
    initMyLocation();
    locman = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    // locman.requestLocationUpdates(provider,60000, 100,loclis);
    // Location = locman.getLastKnownLocation(provider);

}

/** Find and initialize the map view. */
private void initMapView() {
    map = (MapView) findViewById(R.id.map);
    controller = map.getController();
    map.setSatellite(false);
    map.setBuiltInZoomControls(true);
}

/** Find Current Position on Map. */
private void initMyLocation() {
    final MyLocationOverlay overlay = new MyLocationOverlay(this, map);
    overlay.enableMyLocation();
    overlay.enableCompass(); // does not work in emulator
    overlay.runOnFirstFix(new Runnable() {
        public void run() {
            // Zoom in to current location
            controller.setZoom(24);
            controller.animateTo(overlay.getMyLocation());
        }
    });
    map.getOverlays().add(overlay);
}

@Override
public void onLocationChanged(Location location) {
    if (Location != null) {
        lat = Location.getLatitude();
        lon = Location.getLongitude();
        GeoPoint New_geopoint = new GeoPoint((int) (lat * 1e6),
                (int) (lon * 1e6));
        controller.animateTo(New_geopoint);

    }

}

class MyOverlay extends Overlay {
    public MyOverlay() {
    }

    public void draw(Canvas canvas, MapView mapv, boolean shadow) {
        super.draw(canvas, mapv, shadow);

        Projection projection = map.getProjection();
        Path p = new Path();
        for (int i = 0; i < geoPointsArray.size(); i++) {
            if (i == geoPointsArray.size() - 1) {
                break;
            }
            Point from = new Point();
            Point to = new Point();
            projection.toPixels(geoPointsArray.get(i), from);
            projection.toPixels(geoPointsArray.get(i + 1), to);
            p.moveTo(from.x, from.y);
            p.lineTo(to.x, to.y);
        }
        Paint mPaint = new Paint();
        mPaint.setStyle(Style.STROKE);
        mPaint.setColor(0xFFFF0000);
        mPaint.setAntiAlias(true);
        canvas.drawPath(p, mPaint);
        super.draw(canvas, map, shadow);
    }
}

@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

}

@Override
protected boolean isRouteDisplayed() {
    // TODO Auto-generated method stub
    return false;
}
}

L'application fonctionne correctement sans erreur, mais il n'y a pas de chemin tracé, le point d'emplacement se déplace simplement lorsque je me déplace.

Toute aide serait grandement appréciée, merci.

48
David

Le code source de Android mobile open-gpstracker que vous avez appréciée est disponible ici =.

Vous pouvez extraire le code en utilisant l'application cliente SVN ou via Git:

Déboguer le code source vous aidera sûrement.

22
chiranjib

En gros, vous devez suivre les étapes pour créer un détecteur de localisation Android app

Maintenant, si vous écrivez chacun de ces modules vous-même, alors nécessite beaucoup de temps et d’efforts . Il serait donc préférable d'utiliser des ressources prêtes déjà gérées.

En utilisant toutes ces ressources, vous pourrez créer une application de détection de localisation sans faille Android.

1. Lieu d'écoute

Vous devez d’abord écouter l’emplacement actuel de l’utilisateur. Vous pouvez utiliser l'une des bibliothèques ci-dessous pour un démarrage rapide.

exemples d'emplacement Google Play

Cette bibliothèque fournit le dernier emplacement connu, les mises à jour d'emplacement

Gestionnaire d'emplacement

Avec cette bibliothèque, il vous suffit de fournir un objet Configuration avec vos exigences et vous recevrez un emplacement ou un motif d'échec avec tous les éléments décrits ci-dessus.

Partage de lieu en direct

Utilisez ce référentiel open source de l'application Hypertrack Live pour créer une expérience de partage de localisation en direct au sein de votre application en quelques heures. L'application HyperTrack Live vous permet de partager votre emplacement en direct avec vos amis et votre famille via votre application de messagerie préférée lorsque vous êtes sur le point de vous rencontrer. HyperTrack Live utilise les API et SDK HyperTrack.

2. Bibliothèque de marqueurs

Google Maps Android bibliothèque d'utilitaires d'API

  • Groupement de marqueurs - gère l'affichage d'un grand nombre de points
  • Cartes thermiques - Affiche un grand nombre de points sous forme de carte thermique
  • IconGenerator - Affiche du texte sur vos marqueurs.
  • Poly décodage et codage - codage compact pour les chemins, interopérabilité avec les services Web de l'API Maps
  • Géométrie sphérique - par exemple: computeDistance, computeHeading, computeArea
  • [~ # ~] kml [~ # ~] - affiche les données KML.
  • GeoJSON - affiche et met en forme des données GeoJSON

3. Bibliothèques de polylignes

DrawRouteMaps

Si vous souhaitez ajouter une fonctionnalité de cartes de route dans vos applications, vous pouvez utiliser DrawRouteMaps pour vous faciliter la tâche. C'est lib qui vous aidera à dessiner des cartes d'itinéraire entre deux points LatLng.

trail-Android

Animation simple et fluide pour les itinéraires/polylignes sur Google Maps à l'aide de projections. (WIP)

Google-Directions-Android

Ce projet vous permet de calculer la direction entre deux emplacements et d’afficher l’itinéraire sur une carte Google à l’aide de l’API Google Directions.

ne application de démonstration de carte pour un démarrage rapide avec des cartes

0
Khemraj