Tutoriel Android : GLocation

Cela faisait quelques temps qu’on n’avait plus vu de tutoriel Android ! Aujourd’hui, André, un habitué du site, nous propose de découvrir l’utilisation de sa solution de géolocalisation grâce à un tutoriel complet. Attention, tutoriel intégralement en anglais ! Enjoy !

What you will learn :

What it will look like :

Description :

Android.xml

strings.xml

In our case, we don’t have to define a layout.

Next we have to copy the images files we need in a drawable folder under res folder.

MyMapView.java

package com.google.android.maps;
import android.content.Context;
import com.google.android.maps.MapView;
import com.google.common.DataRequestDispatcher;
import com.google.googlenav.map.Map;
import com.google.googlenav.map.TrafficService;
public class MyMapView extends MapView
{
public MyMapView(Context context)
{
super(context);
}
// We just adapt setup and to add a getMap method.
void setup(Map map, TrafficService traffic, DataRequestDispatcher dispatcher)
{
mMap = map;
super.setup(map, traffic, dispatcher);
}
public Map getMap()
{
return mMap;
}
private Map mMap;
}

GlocationMap.java

package org.absynt.android.glocation;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentReceiver;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Paint.Style;
import android.location.Location;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.net.http.RequestQueue;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MyMapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayController;
import com.google.android.maps.Point;
public class GlocationMap extends MapActivity {
// ===========================================================
// Fields
// ===========================================================
private static final String MY_LOCATION_CHANGED_ACTION = new String(
“android.intent.action.LOCATION_CHANGED”);
private static final String ACTION_SEND_TOAST = new String(
“android.intent.action.ACTION_SEND_TOAST”);
/**
* Minimum distance in meters for a followed to be recognize as a Followed
* to be drawn
*/

protected final long MINIMUM_DISTANCECHANGE_FOR_UPDATE = 25; // in Meters
protected final long MINIMUM_TIME_BETWEEN_UPDATE = 5000; // ms
protected final long MINIMUM_TIME_BETWEEN_UPDATE_LIST = 60000; // ms
/*
* Stuff we need to save as fields, because we want to use multiple of them
* in different methods.
*/

protected boolean doUpdates = true;
private MyMapView myMapView = null;
RequestQueue requestQueue;
private String loginId = “Guest”;
private String authToken = “freePass”;
public String m_baseurl = “”;
private int GET_MESSAGES = 2;
protected MapController myMapController = null;
protected OverlayController myOverlayController = null;
protected LocationManager myLocationManager = null;
protected Location myLocation = null;
protected MyIntentReceiver myIntentReceiver = null;
protected final IntentFilter myIntentFilter = new IntentFilter(
MY_LOCATION_CHANGED_ACTION);
protected boolean TRACK_TOOGLE_ACTION = false;
// Store these as global instances so we don’t keep reloading every time
public long endTime;
/**
* This tiny IntentReceiver updates our stuff as we receive the intents
* (LOCATION_CHANGED_ACTION) we told the myLocationManager to send to us.
*/

class MyIntentReceiver extends IntentReceiver {
@Override
public void onReceiveIntent(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(MY_LOCATION_CHANGED_ACTION)) {
if (System.currentTimeMillis() > GlocationMap.this.endTime) {
GlocationMap.this.endTime = System.currentTimeMillis()
+ MINIMUM_TIME_BETWEEN_UPDATE_LIST;
GlocationMap.this.updateList();
// Will simply update our list,
// when receiving an intent

}
if (GlocationMap.this.doUpdates)
GlocationMap.this.updateView();
}
}
}
/**
* This method is so huge, because it does a lot of FANCY painting. We could
* shorten this method to a few lines. But as users like eye-candy apps ;)
* …
*/

protected class MyLocationOverlay extends Overlay {
private Paint innerPaint, borderPaint, textPaint;
Paint paint1 = new Paint();
Paint paint2 = new Paint();
@Override
public void draw(Canvas canvas, PixelCalculator calculator,
boolean shadow) {
super.draw(canvas, calculator, shadow);
// Setup our “brush”/”pencil”/ whatever…
Paint paint = new Paint();
paint2.setARGB(255, 255, 255, 255);
paint.setTextSize(14);
// Create a Point that represents our GPS-Location
Double lat = GlocationMap.this.myLocation.getLatitude() * 1E6;
Double lng = GlocationMap.this.myLocation.getLongitude() * 1E6;
Point point = new Point(lat.intValue(), lng.intValue());
int[] myScreenCoords = new int[2];
// Converts lat/lng-Point to OUR coordinates on the screen.
calculator.getPointXY(point, myScreenCoords);
// Draw a circle for our location
RectF oval = new RectF(myScreenCoords[0] – 7,
myScreenCoords[1] + 7, myScreenCoords[0] + 7,
myScreenCoords[1] – 7);
// Setup a color for our location
// paint.setStyle(Style.FILL);
paint.setStyle(Style.STROKE);
paint.setARGB(255, 80, 150, 30); // Nice strong Android-Green
// Draw our name
canvas.drawText(getString(R.string.map_overlay_own_name),
myScreenCoords[0] + 9, myScreenCoords[1], paint);
// Change the paint to a ‘Lookthrough’ Android-Green
paint.setARGB(80, 156, 192, 36);
paint.setStrokeWidth(1);
// draw an oval around our location
canvas.drawOval(oval, paint);
// With a black stroke around the oval we drew before.
paint.setARGB(255, 0, 0, 0);
paint.setStyle(Style.STROKE);
canvas.drawCircle(myScreenCoords[0], myScreenCoords[1], 7, paint);
}
public Paint getInnerPaint()
{
if (innerPaint == null)
{
innerPaint = new Paint();
innerPaint.setARGB(225, 75, 75, 75); // gray
innerPaint.setAntiAlias(true);
}
return innerPaint;
}
public Paint getBorderPaint()
{
if (borderPaint == null)
{
borderPaint = new Paint();
borderPaint.setARGB(255, 255, 255, 255);
borderPaint.setAntiAlias(true);
borderPaint.setStyle(Style.STROKE);
borderPaint.setStrokeWidth(2);
}
return borderPaint;
}
public Paint getTextPaint()
{
if (textPaint == null)
{
textPaint = new Paint();
textPaint.setARGB(255, 255, 255, 255);
textPaint.setAntiAlias(true);
}
return textPaint;
}
}
private void updateList()
{
// Refresh our location…
this.myLocation = myLocationManager.getCurrentLocation(“gps”);
Map headers = new HashMap();
try
{
String text = URLEncoder.encode(myLocation.toString(), “UTF-8″);
Log.e(“Glocation”, GlocationMap.this.m_baseurl
+ “/GlocationServer/?action=location&location=” + text
+ “&loginId=” + loginId + “&authToken=” + authToken);
// We send our location to GlocationServer
requestQueue
.queueRequest(GlocationMap.this.m_baseurl
+ “/GlocationServer/?action=location&location=” + text
+ “&loginId=” + loginId + “&authToken=” + authToken,
“POST”, headers,
new MyEventHandler3(GlocationMap.this), null, 0, false);
}
catch (UnsupportedEncodingException e)
{
Log.e(“GlocationMap”, e.getMessage());
}
}
// We create a method sending an Intent to write Toast.
// This will allow us in the next tutorial to display message coming from this Map/Activity
// in another Activity

public void writeToast(String msg)
{
Intent intent = new Intent(ACTION_SEND_TOAST);
intent.putExtra(“toast”, msg);
broadcastIntent(intent);
}
public MyMapView getMMapView()
{
return GlocationMap.this.myMapView;
}
// ===========================================================
// “”"Constructor”"” (or the Entry-Point of this class)
// ===========================================================

@Override
protected void onCreate(Bundle icicle)
{
super.onCreate(icicle);
/* Create a new MapView and show it */
GlocationMap.this.m_baseurl = (String) getText(R.string.base_url);
GlocationMap.this.myMapView = new MyMapView(this);
this.setContentView(GlocationMap.this.myMapView);
requestQueue = new RequestQueue(this);
/*
* MapController is capable of zooming and animating and stuff like that
*/

this.myMapController = GlocationMap.this.myMapView.getController();
/*
* With these objects we are capable of drawing graphical stuff on top
* of the map
*/

this.myOverlayController = GlocationMap.this.myMapView
.createOverlayController();
MyLocationOverlay myLocationOverlay = new MyLocationOverlay();
this.myOverlayController.add(myLocationOverlay, true);
// Initialize the LocationManager
this.myLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
/*
* Prepare the things, that will give us the ability, to receive
* Information about our GPS-Position.
*/

this.setupForGPSAutoRefreshing();
this.myLocation = myLocationManager.getCurrentLocation(“gps”);
Double lat = GlocationMap.this.myLocation.getLatitude() * 1E6;
Double lng = GlocationMap.this.myLocation.getLongitude() * 1E6;
Point point = new Point(lat.intValue(), lng.intValue());
this.myMapController.centerMapTo(point, false);
this.myMapController.zoomTo(11);
this.updateView();
}
@Override
public void onPause()
{
super.onPause();
this.doUpdates = false;
}
@Override
public void onStop()
{
super.onStop();
}
@Override
public void onRestart()
{
super.onRestart();
this.doUpdates = true;
}
@Override
public void onDestroy()
{
super.onDestroy();
this.unregisterReceiver(this.myIntentReceiver);
}
/**
* Restart the receiving, when we are back on line.
*/

@Override
public void onResume()
{
super.onResume();
this.doUpdates = true;
}
/**
* Make sure to stop the animation when we’re no longer on screen, failing
* to do so will cause a lot of unnecessary cpu-usage!
*/

@Override
public void onFreeze(Bundle icicle)
{
super.onFreeze(icicle);
this.doUpdates = false;
}
// ===========================================================
// Overridden methods
// ===========================================================
// Called only the first time the options menu is displayed.
// Create the menu entries.
// Menu adds items in the order shown.

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
boolean supRetVal = super.onCreateOptionsMenu(menu);
menu.add(0, 0, getString(R.string.main_menu_zoom_in));
menu.add(0, 1, getString(R.string.main_menu_zoom_out));
menu.add(0, 2, getString(R.string.main_menu_toggle_street_satellite));
menu.add(0, 4, getString(R.string.main_menu_traffic));
menu.add(0, 8, getString(R.string.main_menu_toogleTrackMode));
return supRetVal;
}
@Override
public boolean onOptionsItemSelected(Menu.Item item)
{
switch (item.getId())
{
case 0:
// Zoom not closer than possible
this.myMapController.zoomTo(Math.min(21, GlocationMap.this.myMapView.getZoomLevel() + 1));
return true;
case 1:
// Zoom not farer than possible
this.myMapController.zoomTo(Math.max(1, GlocationMap.this.myMapView.getZoomLevel() – 1));
return true;
case 2:
// Switch to satellite view
GlocationMap.this.myMapView.toggleSatellite();
return true;
case 4:
// Switch on traffic overlays
GlocationMap.this.myMapView.toggleTraffic();
return true;
case 8:
if (TRACK_TOOGLE_ACTION)
{
GlocationMap.this.TRACK_TOOGLE_ACTION = false;
}
else
{
GlocationMap.this.TRACK_TOOGLE_ACTION = true;
}
return true;
}
return false;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_I)
{
// Zoom not closer than possible
this.myMapController.zoomTo(Math.min(21,
GlocationMap.this.myMapView.getZoomLevel() + 1));
return true;
}
else if (keyCode == KeyEvent.KEYCODE_O)
{
// Zoom not farer than possible
this.myMapController.zoomTo(Math.max(1, GlocationMap.this.myMapView.getZoomLevel() – 1));
return true;
}
else if (keyCode == KeyEvent.KEYCODE_S)
{
// Switch on the satellite images
GlocationMap.this.myMapView.toggleSatellite();
return true;
} else if (keyCode == KeyEvent.KEYCODE_T)
{
// Switch on traffic overlays
GlocationMap.this.myMapView.toggleTraffic();
return true;
} else if (keyCode >= KeyEvent.KEYCODE_1
&& keyCode <= KeyEvent.KEYCODE_9)
{
int item = keyCode – KeyEvent.KEYCODE_1;
Log.e(“GlocationMAP”, “MyLocationOverlay…KEYCODE_1 ” + item);
} else if (keyCode == KeyEvent.KEYCODE_C)
{
if (TRACK_TOOGLE_ACTION)
{
GlocationMap.this.TRACK_TOOGLE_ACTION = false;
}
else
{
GlocationMap.this.TRACK_TOOGLE_ACTION = true;
}
// this.myMapController.setFollowMyLocation(TRACK_TOOGLE_ACTION);
return true;
}
return false;
}
// ===========================================================
// Methods
// ===========================================================
private void setupForGPSAutoRefreshing() {
/*
* Register with out LocationManager to send us an intent (whos
* Action-String we defined above) when an intent to the location
* manager, that we want to get informed on changes to our own position.
* This is one of the hottest features in Android.
*/

List providers = this.myLocationManager
.getProviders();
// Get the first provider available
LocationProvider provider = providers.get(0);
this.myLocationManager.requestUpdates(provider,
MINIMUM_TIME_BETWEEN_UPDATE, MINIMUM_DISTANCECHANGE_FOR_UPDATE,
new Intent(MY_LOCATION_CHANGED_ACTION));
/*
* Create an IntentReceiver, that will react on the Intents we made our
* LocationManager to send to us.
*/

this.myIntentReceiver = new MyIntentReceiver();
this.registerReceiver(this.myIntentReceiver, this.myIntentFilter);
}
private void updateView() {
// Refresh our gps-location
this.myLocation = myLocationManager.getCurrentLocation(“gps”);
if (TRACK_TOOGLE_ACTION) {
Double lat = GlocationMap.this.myLocation.getLatitude() * 1E6;
Double lng = GlocationMap.this.myLocation.getLongitude() * 1E6;
Point point = new Point(lat.intValue(), lng.intValue());
this.myMapController.centerMapTo(point, false);
}
/*
* Redraws the mapView, which also makes our OverlayController redraw
* our Circles and Lines
*/

GlocationMap.this.myMapView.invalidate();
}
@Override
protected void onActivityResult(int requestCode, int resultCode,
String data, Bundle extras) {
if (requestCode == GET_MESSAGES) {
GlocationMap.this.updateView();
}
}
}

MyEventHandler3.java

package org.absynt.android.glocation;
import android.app.Activity;
import android.net.http.EventHandler;
import android.net.http.Headers;
import android.net.http.SslCertificate;
import android.util.Log;
import java.io.ByteArrayOutputStream;
import java.util.Iterator;
/**
* Handler to get the http status when we post a new tweet
*/

class MyEventHandler3 implements EventHandler
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Activity activity;
private GlocationMap glocationMap;
MyEventHandler3(Activity activity)
{
this.activity = activity;
this.glocationMap = (GlocationMap) activity;
}
public void status(int i, int i1, int i2, String s)
{
Log.d(“MyEventHandler3″, “status [" + s + "]“);
}
@SuppressWarnings(“unchecked”)
public void headers(Iterator iterator)
{
}
public void headers(Headers headers)
{
}
public void data(byte[] bytes, int len)
{
baos.write(bytes, 0, len);
}
public void endData()
{
// String text = new String(baos.toByteArray());
// Log.e(“MyEventHandler3″, “text = ” + text);

}
public void error(int i, String s)
{
Log.e(“MyEventHandler3″, “error [" + s + "]“);
glocationMap.writeToast(“MyEventHandler3 error [" + s + "]“);
}
public void handleSslErrorRequest(int i, String s, SslCertificate sslCertificate)
{
Log.e(“MyEventHandler3″, “ssl error [" + s + "]“);
glocationMap.writeToast(“MyEventHandler3 error [" + s + "]“);
}
}

Merci André pour ce tutoriel… La suite au prochain épisode !

Edit : Voici enfin les sources du tutoriel. Enjoy !

Pour aller plus loin :

53 commentaires sur "Tutoriel Android : GLocation" :

  • fouguasse le 12/08/2008

    Merci pour le tuto ki m’a l’air bien sympa, sauf que si tu pouvais avoir un éditeur pour pouvoir faire des décalages (TAB) pour les différentes accolades, les différentes méthodes, cela en serait plus lisible…

    Merci bien à plus, et vivement la fin 2008 ;-)

  • Andre le 13/08/2008

    Excuse pour les Tabs, elles ont sautees a la mise en page du tutorial.

    Pour les gens interesses, envoyez moi un mail et je peux vous envoyer le zip correspondant a cette appli.

    Cordialement

    Andre

  • PointGPhone le 16/08/2008

    Effectivement je vais retravailler la mise en page…

  • psal78 le 20/10/2008

    Salut,
    ça m’intéresse pas mal d’avoir le zip de l’appli stp…
    On doit faire une présentation-cours d’Android et un TP, je pense que ça pourrait etre sympa la GeoLocalisation…
    Merci d’avance

  • Régis le 26/10/2008

    Bonjour,

    Merci pour le tutoriel.

    Peux tu m’envoyer les sources ?

    Je te remercie par avance.
    Régis

  • PointGPhone le 26/10/2008

    Je vais transmettre le message à l’intéressé ;)

  • lamine le 9/11/2008

    Je suis interessé par la suite du code car il m’a l’air incomplet..il faut bien à un moment preciser sa latitude et longitude pr que le serveur glocalisation restitue notre position..

  • Séb le 15/11/2008

    Salut, j’ai pas vu de lien ou autre. Donc si tu veux bien prendre la peine de m’envoyer le zip ça serait sympa.
    Merci

  • PointGPhone le 19/11/2008

    J’ai transmis le message à l’intéressé, il va me donner le fichier que je mettrais online.

  • imed le 12/02/2009

    bonjour,
    merci pour le tuto
    je suis tres interesse svp envoyer moi votre zip sur mon email: imedo_bena@hotmail.com

    cordiallement

    imed

  • hellscarz le 4/03/2009

    Bonjour et merci pour le tuto.
    Serait-il possible d’avoir un zip des sources?
    Merci d’avance

  • hellscarz le 17/03/2009

    up up up

  • ArteFakt le 7/04/2009

    Bonjour,

    Merci pour ce tuto.
    J’aimerai également les sources si c’est toujours possible.
    Mon email : artefakt@hotmail.com
    Merci d’avance.

    Et bonne continuation ! :-)

  • allfab le 14/04/2009

    Hello,

    Les tutos sont excellents ! S’il est toujours possible d’avoir les sources, je suis preneur.

    Dans l’attente,
    Bonne continuation

  • PointGPhone le 14/04/2009

    André m’a finalement fourni les sources ! Je les mets en ligne dès que je rentre chez moi…

  • PointGPhone le 22/04/2009

    Les sources sont en lignes !

    http://www.pointgphone.com/files/GLocation.tgz

  • Seb le 24/04/2009

    Bonjour à tous,
    J’ai pas mal de problème avec ce tutoriel. Un certain nombre de classes sont manquantes (ex : com.google.common.DataRequestDispatcher; com.google.googlenav.map.Map; com.google.googlenav.map.TrafficService; sont introuvable).
    Quelle version du sdk doit être utilisé? (j’utilise le sdk 1.1 r1)

    Toute idée est la bienvenue.

  • Andre Charles Legendre le 29/04/2009

    La version utilise est la version 1.0…
    Il est vrai que de nombreuses API ont etees supprimee par l’equipe Android depuis.
    Parfois remplacees en mieux. Parfois discontinuees pour des cause de restriction des droits.
    Je viens d’envoyer a Loic une tutoriel pour la version 1.5 mais qui ne reprends pour le moment qu’une petite partie de celui-la : install 1.5 et une application map basique.
    Je pense proposer progressivement la suite du portage.

    A+

    Andre

  • Abir Saïd le 11/05/2009

    Bonjour à tous,
    Merci Andre pour ce bon tutoriel, j’attends toujours la nouvelle version du code avec la version 1.5 du SDK.

    Merci d’avance et ce très gentil de ta part pour nous avoir partager votre code.

    Bonne journée à tous!

  • Ann le 27/05/2009

    hi
    com.google.common.DataRequestDispatcher package is not available on android1.5.can you please help me finding an alternative for this package or any way how i can use it?

  • Andre Charles Legendre le 27/05/2009

    Bonjour Ann

    Tu as raison.
    Il faut utiliser httpClient.
    Dans mon prochain tutorial, je donne un exemple.
    Je crois que Loic va le publier bientot.

    Cordialement

    Andre

  • Ann le 27/05/2009

    Merci beaucoup

  • bensouda le 28/05/2009

    bonjour, peut tu stp, m’envoyer les sources sur mon adresse : midoub@gmail.com
    Merci d’avence.

  • Andre Charles Legendre le 29/05/2009

    Bonjour bensouda

    Je viens de t’envoyer les sources sur ton e_mail.
    Mais ils sont pour le SDK 1.0.
    Loic a commence a publier mes nouveaux tutoriaux adaptes pour le SDK 1.5

    Cordialement

    Andre

  • Anthony le 16/06/2009

    Salut,

    Est-ce que tu peux m’envoyer la source de version 1.5 sur ma boite mail ?

    Merci d’avance
    Anthony

  • Yorick le 17/06/2009

    Salut,

    Pourrais tu m’envoyer tes sources de la version SDK 1.5 stp?

    Merci d’avance,

    Yorick

  • Andre Charles Legendre le 17/06/2009

    Anthony et Yoric

    J’ai besoin de votre e_mail pour vous envoyer les sources.

    Soit vous les postez ici, soit vous m’envoyez un e_mail et je repondrai.
    Je crois que vous pouvez le mettre dans votre profile ici.

  • Anthony le 17/06/2009

    Mon e-mail est anthony.gies (at) gmail.com

    Merci d’avance.
    Anthony

  • Xavier le 9/07/2009

    Bonjour, merci pour ce tuto, serait il possible d’avoir les sources ?

    mypmype (at) hotmail.com

    Merci d’avance.
    Xavier

  • safa le 22/07/2009

    bonjour Andre,
    Merci beaucoup pour ton tuto, j’aimerais bien les sources pour la version 1.5. Je vous serai reconnaissante si vous me les envoyez par mail.
    Mon adresse mail est sbelmaaza@gmail.com.
    Cordialement,
    Safa.

  • Romualdk le 6/08/2009

    Bonjour,

    Merci pour ce tuto.
    J’aimerai également les sources si c’est toujours possible.
    Mon email : romualdk@gmail.com
    Merci d’avance.

    Et bonne continuation ! :-)

  • jahbromo le 7/08/2009

    Merci pour ce tutoral
    J’aimerai également les sources si c’est toujours possible.
    Mon email : jahbromo@gmail.com
    Merci d’avance.

  • laurent le 16/08/2009

    tutorial très interessant, manque juste les sources pour éviter de tout reprendre à la main , si c’est possible de les avoir ? merci

  • PointGPhone le 16/08/2009

    Les sources sont disponibles au téléchargement à la fin de l’article.

  • FETS le 30/09/2009

    Manque encore les sources ………

  • PointGPhone le 2/10/2009

    Je m’en occupe !

  • BobVelis le 19/11/2009

    Je tien a vous signaler que l’inexistence du lien vers les sources de l’article:
    Tutoriel Android : GLocation

    Merci.

  • maxlener le 26/11/2009

    Merci pour ce tutoral
    l’inexistence du lien vers les sources de l’article : erreur 404
    J’aimerai également les sources si c’est toujours possible.
    Mon email : mentnewton@gmail.com
    Merci d’avance.

  • PointGPhone le 27/11/2009

    Je vais essayer de remettre la main dessus… ;)

  • Titi le 2/12/2009

    Bonjour ….un grand merci pour tous ces tuto qui m’ont permis de decouvrir Android…
    J’aimerais bien avoir tes sources pour ce projet.
    Mon mail : thibault.darcel@isen.fr
    Merci beaucoup et bonne continuation.

  • tianovitch le 20/01/2010

    Bonjour,

    Merci pour le tutoriel.

    Peux tu m’envoyer les sources ?

    Je te remercie par avance.

  • maxlerner le 21/01/2010

    SVP, si quelqu’un a le code source, svp envoyer le moi à cette adresse : mentnewton@gmail.com . merci beaucoup !!! ça m’aidera pour mon projet.

  • maxlerner le 21/01/2010

    cool, j’ai une astuce pour l’avoir. enfin j’ai pu la récupérer !!! et pour l’erreur sur “MapPoint” g remplacé parla classe GeoPoint. j’espere que c’st toujours ok car il y’avait un soucis de compilation avec MapPoint suite à une mise à jour de la SDK r2.

  • Yop le 25/01/2010

    @maxlerner
    C’est quoi l’astuce pour avoir le source le lien zip et en 404…

  • Fadwa le 2/02/2010

    Bonjour André,
    Merci pour le tutorial
    je suis intéressé svp envoyer moi votre zip sur mon email: Ing.Mnedfadoua@yahoo.fr
    cordialement
    Fadwa

  • mohamado le 9/02/2010

    Bonjour Andrés ,
    je te felicite pour ce tutoriel enrechissant ,
    je suis intéressé svp envoyer moi votre zip sur mon email:benhassine_meed@yahoo.fr
    Cordialement ,
    merci

  • Josef le 12/02/2010

    Bonjour,
    le tutoriel à l’aire très bien, dommage le lien pour le télécharger est corrompu.

    j’aimerai moi aussi avoir le code avec un sdk 1.5 sur josef.attia@gmail.com
    merci bien

  • bilal le 15/02/2010

    bnjr.
    merci pour le tut ; j’aimerai bien avoir les codes sources .

    best regards.

  • bilal le 15/02/2010

    j’ai oublié de mettre mon e-mail: bilal7002@hotail.fr merci de m’envoyer les codes sources le plutot possible je me met a fond sur android .

  • Mehdi le 19/02/2010

    bonjour andre est ce que tu peux m envoyer les sources sur ma boite mail?merci
    mehdi.hassine@hotmail.fr

  • Lemanant le 23/02/2010

    Super tuto, si les sources sont toujours dispos, je suis preneur sur maalveno@free.fr.

    merci

  • CROZET le 4/03/2010

    super je serai preneur du code source afin de pouvoir l’intégrer dans un formulaire pour récupérer les infos de géolocalisation d’une aire MERCI

  • CROZET le 4/03/2010

    mon mail ne c’est pas afficher :crocro69@free.fr pour la réponse a la question ci dessus Merci Merci

Exprimez-vous en laissant un commentaire !

Les commentaires ne sont pas modérés avant leur publication alors n'hésitez à vous exprimer librement.

Une seule règle : Rester un minimum poli et constructif.

Vous avez des questions d'ordre général à poser? Direction le forum.