Hardware Android

//package com.android.gnview.utils;
import java.util.ArrayList;
import java.util.List;
import android.graphics.Point;
import android.location.Location;
import android.location.LocationManager;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.Projection;
/**
 * Classe de m?thodes utilitaire pour la localisation.
 * @author Antoine Belliard
 *
 */
public class LocUtils {
  /**
   * M?thode pour retourn?e la distance entre deux Location
   * @param a
   * @param b
   * @return la distance en m ou km
   */
  public static String distanceBeetwin(Location a, Location b) {
    double dist = a.distanceTo(b);
    String unit;
    if (dist > 1000) {
      unit = " km";
      dist /= 1000;
      dist = ((int) (dist*100)) / 100.0;
    } else {
      unit = " m";
      dist = ((int) (dist*100)) / 100;
    }
    return (dist + unit);
  }
  /**
   * M?thode qui retourne le plus pr?cis de tous les appareils de localisation
   * @param lManager le manager
   * @return le provider le plus pr?cis
   */
  public static String getBestLocationProvider(LocationManager lManager) {
    List  providers = lManager.getProviders(true);
    String choixSource = null;
    if (providers.isEmpty()){
      return null;
    }else if(providers.size()==1){
      return providers.get(0);
    }else{
      int i = Integer.MAX_VALUE;
      for(String provider : providers) {
        if (lManager.getProvider(provider).getAccuracy() 0 ) {
          choixSource = provider;
          i = lManager.getProvider(provider).getAccuracy();
        }
      }
    }
    return choixSource;
  }
  /**
   * M?thode de conversion d'une location en GeoPoint
   * @param location une localisation
   * @return le GeoPoint de m?me position
   */
  public static GeoPoint toGeoPoint(Location location) {
    return new GeoPoint( (int)(location.getLatitude()*1E6),(int)(location.getLongitude()*1E6) );
  }
  /**
   * @param myLocation
   * @return
   */
  public static Location toLocation(GeoPoint myLocation) {
    Location loc = new Location("");
    loc.setLatitude(myLocation.getLatitudeE6()/1E6);
    loc.setLongitude(myLocation.getLongitudeE6()/1E6);
    return loc;
  }
  /**
   * Appel l'algorithme de Douglas-Peucker
   * @param projection la projection pour avoir des points graphiques
   * @param line la ligne ? simplifi?e
   * @param d l'erreur
   * @return la liste de location simplifi?e
   */
  public static ArrayList DouglasPeucker(Projection projection, ArrayList line, double d) {
    ArrayList listPoints = GeoUtils.DouglasPeucker(toPoints(projection,line),d);
    return toLineOfInterest(projection, listPoints);
  }
  /**
   * Convertit une liste de Point en liste de Location
   * @param projection la projection ? appliquer
   * @param listPoints la liste de point
   * @return une lineOfInterest
   */
  private static ArrayList toLineOfInterest(Projection projection, ArrayList listPoints) {
    ArrayList retLine = new ArrayList();
    for (Point p:listPoints) {
      retLine.add( toLocation(projection.fromPixels(p.x, p.y)) );
    }
    return retLine;
  }
  /**
   * Convertit une liste de location en une liste de Point
   * @param projection la projection ? appliquer
   * @param line la liste ? convertir
   * @return une liste de Points
   */
  private static List toPoints(Projection projection, ArrayList line) {
    ArrayList retPoints = new ArrayList();
    Point prev = new Point();
    for (Location l:line) {
      Point p = new Point();
      projection.toPixels(toGeoPoint(l), p);
      if (!p.equals(prev.x, prev.y)) {
        retPoints.add(p);
      }
      prev = p;
    }
    return retPoints;
  }
  /**
   * V?rifie si le GPS est activ?
   * @param lManager le location manager ? v?rifi?
   * @return true si le GPS est activ?, false sinon
   */
  public static boolean isGPSEnabled(LocationManager lManager) {
    List EnablesProviders = lManager.getProviders(true);
    for (String provider:EnablesProviders) {
      if (provider.equalsIgnoreCase(LocationManager.GPS_PROVIDER))
        return true;
    }
    return false;
  }
}