Partage
  • Partager sur Facebook
  • Partager sur Twitter

trace GPS Android

30 janvier 2012 à 16:57:56

Bonjour à tous,

Je dois réaliser dans le cadre d'un projet une application utilisant la puce GPS d' Android.
Je me suis donc inspiré de codes trouvés sur Internet, j'ai une application qui tourne et qui me donne mes coordonnées GPS.
Or j'aimerais maintenant pouvoir écrire ces positions GPS dans un fichier (externe), je crois d'ailleurs qu'il s'agit de fichiers .gpx, pour pouvoir ensuite les lire et éventuellement afficher une trace par la suite. Voici le code mes différents fichiers

fichier java :

package test1.namespace;

import java.io.IOException;
import java.util.List;
 
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Toast;
 
public class Test1Activity extends Activity implements OnClickListener, LocationListener{
	private LocationManager lManager;
    private Location location;
    private String choix_source = "";
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        //On spécifie que l'on va avoir besoin de gérer l'affichage du cercle de chargement
        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
 
        setContentView(R.layout.main);
 
        //On récupère le service de localisation
        lManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
 
        //Initialisation de l'écran
        reinitialisationEcran();
 
        //On affecte un écouteur d'évènement aux boutons
        findViewById(R.id.choix_source).setOnClickListener(this);
        findViewById(R.id.obtenir_position).setOnClickListener(this);
        findViewById(R.id.afficherAdresse).setOnClickListener(this);
    }
 
        //Méthode déclencher au clique sur un bouton
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.choix_source:
			choisirSource();
			break;
		case R.id.obtenir_position:
			obtenirPosition();
			break;
		case R.id.afficherAdresse:
			afficherAdresse();
			break;
		default:
			break;
		}
	}
 
	//Réinitialisation de l'écran
	private void reinitialisationEcran(){
		((TextView)findViewById(R.id.latitude)).setText("0.0");
		((TextView)findViewById(R.id.longitude)).setText("0.0");
		((TextView)findViewById(R.id.altitude)).setText("0.0");
		((TextView)findViewById(R.id.adresse)).setText("");
 
		findViewById(R.id.obtenir_position).setEnabled(false);
		findViewById(R.id.afficherAdresse).setEnabled(false);
	}
 
	private void choisirSource() {
		reinitialisationEcran();
 
		//On demande au service la liste des sources disponibles.
		List <String> providers = lManager.getProviders(true);
		final String[] sources = new String[providers.size()];
		int i =0;
		//on stock le nom de ces source dans un tableau de string
		for(String provider : providers)
			sources[i++] = provider;
 
		//On affiche la liste des sources dans une fenêtre de dialog
		//Pour plus d'infos sur AlertDialog, vous pouvez suivre le guide
		//http://developer.android.com/guide/topics/ui/dialogs.html
		new AlertDialog.Builder(Test1Activity.this)
		.setItems(sources, new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, int which) {
				findViewById(R.id.obtenir_position).setEnabled(true);
				//on stock le choix de la source choisi
				choix_source = sources[which];
				//on ajoute dans la barre de titre de l'application le nom de la source utilisé
				setTitle(String.format("%s - %s", getString(R.string.app_name),
						choix_source));
			}
		})
		.create().show();
	}
 
	private void obtenirPosition() {
		//on démarre le cercle de chargement
		setProgressBarIndeterminateVisibility(true);
 
		//On demande au service de localisation de nous notifier tout changement de position
		//sur la source (le provider) choisie, toute les minutes (60000millisecondes).
		//Le paramètre this spécifie que notre classe implémente LocationListener et recevra
		//les notifications.
		lManager.requestLocationUpdates(choix_source, 60000, 0, this);
	}
 
	private void afficherLocation() {
		//On affiche les informations de la position a l'écran
		((TextView)findViewById(R.id.latitude)).setText(String.valueOf(location.getLatitude()));
		((TextView)findViewById(R.id.longitude)).setText(String.valueOf(location.getLongitude()));
		((TextView)findViewById(R.id.altitude)).setText(String.valueOf(location.getAltitude()));
	}
 
	private void afficherAdresse() {
		setProgressBarIndeterminateVisibility(true);
 
		//Le geocoder permet de récupérer ou chercher des adresses
		//gràce à un mot clé ou une position
		Geocoder geo = new Geocoder(Test1Activity.this);
		try {
			//Ici on récupère la premiere adresse trouvé gràce à la position que l'on a récupéré
			List
<Address> adresses = geo.getFromLocation(location.getLatitude(),
					location.getLongitude(),1);
 
			if(adresses != null && adresses.size() == 1){
				Address adresse = adresses.get(0);
				//Si le geocoder a trouver une adresse, alors on l'affiche
				((TextView)findViewById(R.id.adresse)).setText(String.format("%s, %s %s",
						adresse.getAddressLine(0),
						adresse.getPostalCode(),
						adresse.getLocality()));
			}
			else {
				//sinon on affiche un message d'erreur
				((TextView)findViewById(R.id.adresse)).setText("L'adresse n'a pu être déterminée");
			}
		} catch (IOException e) {
			e.printStackTrace();
			((TextView)findViewById(R.id.adresse)).setText("L'adresse n'a pu être déterminée");
		}
		//on stop le cercle de chargement
		setProgressBarIndeterminateVisibility(false);
	}
 
	public void onLocationChanged(Location location) {
		//Lorsque la position change...
		Log.i("Tuto géolocalisation", "La position a changé.");
		//... on stop le cercle de chargement
		setProgressBarIndeterminateVisibility(false);
		//... on active le bouton pour afficher l'adresse
		findViewById(R.id.afficherAdresse).setEnabled(true);
		//... on sauvegarde la position
		this.location = location;
		//... on l'affiche
		afficherLocation();
		//... et on spécifie au service que l'on ne souhaite plus avoir de mise à jour
		lManager.removeUpdates(this);
	}
 
	public void onProviderDisabled(String provider) {
		//Lorsque la source (GSP ou réseau GSM) est désactivé
		Log.i("Tuto géolocalisation", "La source a été désactivé");
		//...on affiche un Toast pour le signaler à l'utilisateur
		Toast.makeText(Test1Activity.this,
				String.format("La source \"%s\" a été désactivé", provider),
				Toast.LENGTH_SHORT).show();
		//... et on spécifie au service que l'on ne souhaite plus avoir de mise à jour
		lManager.removeUpdates(this);
		//... on stop le cercle de chargement
		setProgressBarIndeterminateVisibility(false);
	}
 
	public void onProviderEnabled(String provider) {
		Log.i("Tuto géolocalisation", "La source a été activé.");
	}
	public void onStatusChanged(String provider, int status, Bundle extras) {
		Log.i("Tuto géolocalisation", "Le statut de la source a changé.");
	}
 
}


fichier manifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="test1.namespace"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="10" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".Test1Activity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>


et fichier main.xml;
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/RelativeLayout01"
	android:layout_width="fill_parent" 
	android:layout_height="fill_parent"
	xmlns:android="http://schemas.android.com/apk/res/android">
 
	<TextView android:text="Latitude" 
		android:id="@+id/TextView01"
		android:layout_width="wrap_content" 
		android:layout_height="wrap_content"
		android:gravity="center" 
		android:layout_marginLeft="10dip" />
 
	<EditText android:text="0.0" 
		android:id="@+id/latitude"
		android:layout_height="wrap_content" 
		android:layout_alignParentRight="true"
		android:editable="false"
		android:focusable="false"
		android:gravity="center" 
		android:layout_marginRight="10dip"
		android:layout_width="150dip" />
 
	<TextView android:text="Longitude" 
		android:id="@+id/TextView02"
		android:layout_width="wrap_content" 
		android:layout_height="wrap_content"
		android:layout_alignBottom="@+id/longitude" 
		android:layout_alignTop="@+id/longitude"
		android:gravity="center" 
		android:layout_marginLeft="10dip" />
 
	<EditText android:text="0.0" 
		android:id="@+id/longitude"
		android:layout_height="wrap_content" 
		android:layout_alignParentRight="true"
		android:editable="false"
		android:focusable="false"
		android:gravity="center" 
		android:layout_marginRight="10dip"
		android:layout_width="150dip" 
		android:layout_below="@+id/latitude" />
 
	<TextView android:text="Altitude" 
		android:id="@+id/TextView03"
		android:layout_width="wrap_content" 
		android:layout_height="wrap_content"
		android:layout_alignBottom="@+id/altitude" 
		android:layout_alignTop="@+id/altitude"
		android:gravity="center" 
		android:layout_marginLeft="10dip" />
 
	<EditText android:text="altitude" 
		android:id="@+id/altitude"
		android:layout_height="wrap_content" 
		android:layout_alignParentRight="true"
		android:editable="false"
		android:focusable="false"
		android:gravity="center" 
		android:layout_marginRight="10dip"
		android:layout_below="@+id/TextView02" 
		android:layout_width="150dip" />
 
	<LinearLayout android:id="@+id/LinearLayout01"
		android:layout_width="wrap_content" 
		android:layout_height="wrap_content"
		android:layout_below="@id/TextView03" 
		android:layout_centerHorizontal="true"
		android:layout_marginTop="10dip">
 
		<Button android:layout_height="wrap_content" 
			android:text="Choisir la source"
			android:id="@+id/choix_source" 
			android:layout_width="100dip" />
 
		<Button android:layout_height="wrap_content" 
			android:id="@+id/obtenir_position"
			android:text="Obtenir Position" 
			android:layout_width="100dip" />
 
		<Button android:layout_height="wrap_content" 
			android:text="Afficher adresse"
			android:layout_width="100dip" 
			android:id="@+id/afficherAdresse" />
 
	</LinearLayout>
 
	<TextView android:layout_width="wrap_content"
		android:layout_height="wrap_content" 
		android:id="@+id/adresse"
		android:layout_below="@+id/LinearLayout01"
		android:layout_centerHorizontal="true" 
		android:layout_marginTop="10dip" />
 
</RelativeLayout>


Je vous remercie pour l'aide que vous m'apporterez !!
  • Partager sur Facebook
  • Partager sur Twitter