Aller au contenu

Problème d'application type GPS


Invité

Recommended Posts

Salut à tous,

Bon après mes déboires avec l'émulateur trop long, je rencontre actuellement un autre problème. Je réalise une simple application de type "GPS" qui est censée me renvoyer ma latitude, ma longitude et mon altitude. Le problème est que les coordonnées restent à 0 ! Je précise que je teste tout ça SUR L'EMULATEUR et non sur mon Androphone (qui est au SAV ^^), mais à priori ça devrait fonctionner si j'en crois les retours de certains sites. Je précise également que je n'ai rien bidouillé à l'émulateur, donc si jamais faut qu'il soit connecté au net ou autre, merci de me le préciser, car ça vient peut être de là ^^

Voici donc mon code java, plutôt évident:


package com.gps;


import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
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 Hello extends Activity implements OnClickListener,LocationListener {

private LocationManager lManager;
private Location location;
private String choix_source = "";

public void onCreate(Bundle savedInstanceState)
{
	super.onCreate(savedInstanceState);


	// Pour le loading
	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
	resetScreen();

	// Affectation des écouteurs d'événement
	findViewById(R.id.choix_source).setOnClickListener(this);
	findViewById(R.id.obtenir_position).setOnClickListener(this);

}

// Méthode déclencher au clique sur un bouton
public void onClick(View v)
{
	switch (v.getId())
	{
	case R.id.choix_source:
		getSource();
    break;
	case R.id.obtenir_position:
		getPos();
	break;
	default: break;
	}
}

// Réinitialisation de l'écran
private void resetScreen() {
	((TextView) findViewById(R.id.latitude)).setText("0.0");
	((TextView) findViewById(R.id.longitude)).setText("0.0");
	((TextView) findViewById(R.id.altitude)).setText("0.0");

	findViewById(R.id.obtenir_position).setEnabled(false);

}

private void getSource()
{
	resetScreen();

	// 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;

	// Stockage
	for (String provider : providers) sources[i++] = provider;

	// On affiche la liste des sources dans une fenêtre de dialog

	new AlertDialog.Builder(Hello.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 getPos()
{
	// Démarrage du loading
	setProgressBarIndeterminateVisibility(true);


	lManager.requestLocationUpdates(choix_source, 1000, 0, this);
}

private void displayLoc()
{
	// 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()));
}



public void onLocationChanged(Location location)
{

	Log.i("Attention", "La position a changé.");

	setProgressBarIndeterminateVisibility(false);

	this.location = location;

	displayLoc();

	lManager.removeUpdates(this);
}


public void onProviderDisabled(String provider)
{

	Log.i("Attention", "La source a été désactivée");

	Toast.makeText(Hello.this,
			String.format("La source \"%s\" a été désactivée", provider),
			Toast.LENGTH_SHORT).show();

	lManager.removeUpdates(this);

	setProgressBarIndeterminateVisibility(false);
}

public void onProviderEnabled(String provider)
{
	Log.i("Attention", "La source a été activée.");
}
public void onStatusChanged(String provider, int status, Bundle extras)
{
	Log.i("Attention", "Le statut de la source a changé.");
}

}

Je vous mets également le fichier du projet en PJ, au cas où vous voudriez tester sur vos Androphones... (sait-on jamais).. Par avance, merci de prendre du temps pour nous aider, nous pauvres ignards ^^

Lien vers le commentaire
Partager sur d’autres sites

As-tu donné les permissions nécessaires (dans le androidManifest.xml) pour ton application ?

As-tu poussé des informations GPS auprès de l'émulateur afin qu'il puisse simuler le GPS ? (cf doc)

Lien vers le commentaire
Partager sur d’autres sites

Salut et merci de ta réponse.

Mon AndoidManifest contient bien les permissions, voici le code:

  
   <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
   <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"></uses-permission>
   <uses-sdk android:minSdkVersion="3" />

En ce qui concerne le lien que tu m'as donné, je ne comprends pas où le site veut en venir. Si j'ai bien compris ce qu'ils disent, on peut envoyer des coordonnées au GPS de 3 manières différentes, mais moi je veux simplement récupérer des coordonnées... Ai-je mal compris le lien que tu m'as donné ?

Cette fois vous trouverez en PJ mon projet...

Merci encore une fois.

Lien vers le commentaire
Partager sur d’autres sites

Le lien indiqué fait référence à la façon de donner des données de simulation du GPS, si tu utilises l'émulateur (ce qui est ton cas si j'ai bien suivi). L'émulateur n'a pas de vrai GPS, il doit le simuler, et pour cela, il faut lui fournir des infos, ce qui peut être fait de différentes manières comme l'indique la doc

Lien vers le commentaire
Partager sur d’autres sites

Merci vais essayer

EDIT: Ca ne fonctionne pas... Tout reste à 0 alors que je lui envoie une commande geo fix avec des coordonnées... Soit je suis manche, soit y'a un truc dans mon code qui passe pas ^^ Soit les deux :D

Lien vers le commentaire
Partager sur d’autres sites

Cela ne vient pas de ton code, je viens de tester et ça marche (testé sur un vrai téléphone, pas eu le courage d'essayer l'émulateur; localisation via le réseau, parce que pour le GPS, je n'arrive pas à avoir le fix dans la maison)

Lien vers le commentaire
Partager sur d’autres sites

Salut et merci de ta réponse, ça fait plaisir.

J'aurai une question si ça ne te dérange pas, lorsque tu cliques sur OBTENIR position et que tu bouges, celle-ci se met-elle à jour "en live" où tu dois recliquer sur obtenir position pour qu'elle le fasse ?

Lien vers le commentaire
Partager sur d’autres sites

Salut et merci de ta réponse, ça fait plaisir.

J'aurai une question si ça ne te dérange pas, lorsque tu cliques sur OBTENIR position et que tu bouges, celle-ci se met-elle à jour "en live" où tu dois recliquer sur obtenir position pour qu'elle le fasse ? Logiquement elle doit se mettre à jour, mais sait-on jamais..

Lien vers le commentaire
Partager sur d’autres sites

La position ne se met pas à jour en continu, puisque une fois obtenue (dans onLocationChanged), tu désenregistres la notification de la mise à jour de la position (via lManager.removeUpdates(this); )

Lien vers le commentaire
Partager sur d’autres sites

Ah bah oui, suis-je bête... Donc en enlevant cette instruction, la MAJ devrait se faire en temps réel c'est bien ça ?

Lien vers le commentaire
Partager sur d’autres sites

Oui, cela se mettra à jour lorsque la position change

Par contre, dans ce cas, pense à border l'utilisation du LocationManager en désactivant la mise à jour lorsque tu quittes l'Activity (dans le onPause), sinon tu vas avoir des surprises (GPS qui reste activé même après avoir quitté ton application)

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...