La localisation est basée sur les données sortantes du composant GPS du dispositif.
Objectif.
Enregistrer sur l'appareil et diffuser ses coordonnées GPS.
Réalisation.
Avant de coder le script, il faut mettre les permissions dans le manifeste...
./AndroidManifest.xml.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="com.example.gpslocator"
 android:versionCode="1"
 android:versionName="1.0" >
 <uses-sdk
 android:minSdkVersion="7"
 android:targetSdkVersion="7" />
 <!-- DÉBUT INSERTION DANS LE MANIFESTE :
 Les permissions pour accéder aux options du dispositif par l'application
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- localisation GPS -->
 <uses-permission android:name="android.permission.INTERNET" /> <!-- accès internet -->
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- accès à la carte SD -->
 <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <!-- accès à la base de données de compte -->
 <!-- FIN INSERTION -->
 <application
 android:allowBackup="true"
 android:icon="@drawable/ic_launcher"
 android:label="@string/app_name"
 android:theme="@style/AppTheme" >
 <activity
 android:name="com.example.gpslocator.MainActivity"
 android:label="@string/app_name" >
 <intent-filter>
 <action android:name="android.intent.action.MAIN" />
 <category android:name="android.intent.category.LAUNCHER" />
 </intent-filter>
 </activity>
 </application>
</manifest>
./src/com/example/gpslocator/MainActivity.java.
// les imports sont ajoutés dans Eclipse presque dynamiquement : cf utilisation d'Eclipse
package com.example.gpslocator;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.File;
import java.io.BufferedWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Activity;
import android.view.Menu;
import android.content.Context;
import android.content.Intent;
import android.content.res.AssetManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;
 * Ceci est l'unique fichier de l'app
public class MainActivity extends Activity
 @Override
 // onCreate est la méthode d'entrée dans l'application. Quand l'instance de l'appli est créée on exécute ...
 public void onCreate(Bundle savedInstanceState) 
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 // on utilise le LocationManager pour accéder à la localisation
 LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
 // on implémente le location listener
 LocationListener mlocListener = new MyLocationListener();
 mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
 @Override
 public boolean onCreateOptionsMenu(Menu menu) 
 getMenuInflater().inflate(R.menu.activity_main, menu);
 return true;

public class MyLocationListener implements LocationListener
 // mettre l'url du postService
 public String postService = "http://UrlDuService";
 // mettre le chemin du repertoire de sauvegarde des fichiers de données
 public String cropPath = "/download/";
 public String cropName = "a";
 public String cropExtension = "psg";
 public int count = 0;
 // prend le dernier increment de fichier sauvé
 public int getLastCropNumber()
 int nmb=0;
 String[] fileList = new File(Environment.getExternalStorageDirectory()+this.cropPath).list();
 try
 if(fileList.length>0)
 for(int i=0;i<fileList.length;i++)
 if(fileList[i].endsWith("."+this.cropExtension))
 int tmp = Integer.parseInt(fileList[i].split("\\.")[1]);
 if(nmb<tmp) nmb=tmp;
 catch(Exception e)
 // todo
 return nmb;

// lorsque la localisation change
 public void onLocationChanged(Location loc)
 loc.getLatitude();
 loc.getLongitude();
 String Text = loc.getLatitude() + ":" + loc.getLongitude();
 try
 pD(Text);
 sendF();
 catch (Exception e)
 // todo 
 // on prends les emails des comptes enregistrés
 public String getEmailAccount()
 AccountManager manager = (AccountManager) getSystemService(Context.ACCOUNT_SERVICE);
 Account[] accounts = manager.getAccounts();
 //Account[] accounts = manager.getAccountsByType("com.google"); // google only
 List<String> possibleEmails = new LinkedList<String>();
 for (Account account : accounts)
 possibleEmails.add(account.name);

if(!possibleEmails.isEmpty() && possibleEmails.get(0) != null)
 String email = possibleEmails.get(0);
 String[] parts = email.split("@");
 if(parts.length > 0 && parts[0] != null)
 return email;
 else
 return "nobody";
 else
 return "nobody";

// postData : passe les données GPS à saveCrop
 public void pD(String s) throws IOException
 try
 saveCrop(android.text.format.DateFormat.format("yyyy-MM-dd hh:mm:ss", new java.util.Date())+"-"+s+"/");
 this.count++;
 if(this.count>95)
 this.count=0;

catch (IOException e)
 // todo
 // envoi de contenu de fichier ...
 public boolean sendF()
 try
 // crée un client http
 HttpClient httpclient = new DefaultHttpClient();
 // met le http post en place
 HttpPost httppost = new HttpPost(this.postService);
 List nVP = new ArrayList(2);
 nVP.add(new BasicNameValuePair("usr", "damiz"));
 String[] fileList = new File(Environment.getExternalStorageDirectory()+this.cropPath).list();
 if(fileList.length>0)
 for(int i=0;i<fileList.length;i++)
 if(fileList[i].endsWith(cropExtension))
 String cPath = this.cropPath+this.cropName+"."+this.getLastCropNumber()+"."+this.cropExtension;
 // mets le repertoire de fichier en live
 nVP.add(new BasicNameValuePair("ctc", getFile(Environment.getExternalStorageDirectory()+cPath)));
 // envoit le post
 httppost.setEntity(new UrlEncodedFormEntity(nVP));
 HttpResponse response = httpclient.execute(httppost);
 // efface le fichier si envoyé
 File f = new File(Environment.getExternalStorageDirectory()+cPath);
 if (f.exists())
 f.delete();
 catch(Exception e)
 // todo
 return true;

// prend le contenu du fichier
 public String getFile(String filePath) throws java.io.IOException
 BufferedReader reader = new BufferedReader(new FileReader(filePath));
 String line, results = "";
 while( ( line = reader.readLine() ) != null)
 results += line;
 reader.close();
 return results;

// prend le contenu du string
 public String getString(String file)
 File sdcard = Environment.getExternalStorageDirectory();
 //Prend le fichier suivant
 File f = new File(sdcard,"/download/"+file+".txt");
 //Lit le texte du fichier
 StringBuilder text = new StringBuilder();
 try
 BufferedReader br = new BufferedReader(new FileReader(f));
 String line;
 while ((line = br.readLine()) != null)
 text.append(line);
 text.append('\n');
 catch (IOException e)
 // todo
 return text.toString();