Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Problème récupération coodonnéees GPS

4 mai 2012 à 15:29:19

Hello,

Dans le cadre d'un projet je dois récupérer les coordonnées GPS une seule fois au début de l'application. Seulement, je n'y arrive pas ...

la fonction getLastKnownLocation ne fonctionne pas (me retourne null) et quand je fais des requestLocationUpdates ça ne fonctionne pas ...

Voici la classe (une singleton) en question:

package com.plop.android.datamanagers;

import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;

public class LocationManager implements LocationListener {

    private static LocationManager 		m_instance;
    private Location 				m_loc;
    private android.location.LocationManager 	m_locMgr;
	
	private LocationManager(Activity act) {
		// TODO obtenir coordonnees GPS
    	m_locMgr = (android.location.LocationManager) act.getSystemService(Context.LOCATION_SERVICE);

    	List<String> providers = m_locMgr.getAllProviders();
    	
    	for (String provider : providers) {
    		System.out.println("Provider : " + provider);
    		m_loc = m_locMgr.getLastKnownLocation(provider);
    		if (m_loc != null)
    			break;
    	}
    	for (String provider : providers) {
        	m_locMgr.requestLocationUpdates(provider, 0, 0, this);
    	}
    	System.out.println("L > " + m_loc);
    	
    	/*m_loc = m_locMgr.getLastKnownLocation(android.location.LocationManager.GPS_PROVIDER);
    	if (m_loc == null)
    		m_loc = m_locMgr.getLastKnownLocation(android.location.LocationManager.NETWORK_PROVIDER);
    	System.out.println("L > " + m_loc);
    	
    	m_locMgr.requestLocationUpdates(android.location.LocationManager.NETWORK_PROVIDER, 0, 0, this);
    	m_locMgr.requestLocationUpdates(android.location.LocationManager.GPS_PROVIDER, 0, 0, this);*/
	}
	
	public static void initContext(Activity act) {
		act.getApplication().getBaseContext();
		m_instance = new LocationManager(act);
	}
	
	public static LocationManager getInstance() {
		return m_instance;
	}
	
	public Location	getLocation() {
		if (m_loc == null)
			return m_loc;
		return new Location(android.location.LocationManager.GPS_PROVIDER);
	}

	// Events
	@Override
	public void onLocationChanged(Location location) {
		System.out.println("Location update " + location);
		if (location != null) {
			m_loc = location;
			m_locMgr.removeUpdates(this);
		}
	}

	@Override
	public void onProviderDisabled(String provider) {
		System.out.println("Provider disabled : " + provider);
	}

	@Override
	public void onProviderEnabled(String provider) {
		System.out.println("Provider enabled : " + provider);
	}

	@Override
	public void onStatusChanged(String provider, int status, Bundle extras) {
		System.out.println("Status changed : " + provider);
	}
}


La première méthode appelée est initContext (statique) puis getInstance().getLocation() .


Au niveau matériel je suis avec eclipse et l'émulateur par défaut avec GPS et NETWORK activé.

Merci d'avance pour votre aide ;)

EDIT : petite précision, je suis sous android 2.1
  • Partager sur Facebook
  • Partager sur Twitter
12 mai 2012 à 1:42:23

Tu met à jour les coordonnées gps de l'émulateur ? (via telnet ou eclipse)
  • Partager sur Facebook
  • Partager sur Twitter