765 votes

Comment obtenir la position GPS actuelle de manière programmatique dans Android ?

J'ai besoin d'obtenir ma position actuelle en utilisant le GPS de manière programmatique. Comment puis-je le faire ?

456voto

RDC Points 9222

J'ai créé une petite application avec une description étape par étape pour obtenir les coordonnées GPS de l'emplacement actuel.

Le code source complet de l'exemple se trouve dans Obtenir les coordonnées du lieu actuel, le nom de la ville - dans Android .


Voyez comment cela fonctionne :

  • Tout ce que nous devons faire est d'ajouter cette permission dans le fichier manifeste :

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  • Et créez une instance de LocationManager comme ceci :

    LocationManager locationManager = (LocationManager)
    getSystemService(Context.LOCATION_SERVICE);
  • Vérifiez si le GPS est activé ou non.

  • Et ensuite, implémenter le LocationListener et obtenir les coordonnées :

    LocationListener locationListener = new MyLocationListener();
    locationManager.requestLocationUpdates(
    LocationManager.GPS_PROVIDER, 5000, 10, locationListener);
  • Voici l'exemple de code pour le faire


/*---------- Listener class to get coordinates ------------- */
private class MyLocationListener implements LocationListener {

    @Override
    public void onLocationChanged(Location loc) {
        editLocation.setText("");
        pb.setVisibility(View.INVISIBLE);
        Toast.makeText(
                getBaseContext(),
                "Location changed: Lat: " + loc.getLatitude() + " Lng: "
                    + loc.getLongitude(), Toast.LENGTH_SHORT).show();
        String longitude = "Longitude: " + loc.getLongitude();
        Log.v(TAG, longitude);
        String latitude = "Latitude: " + loc.getLatitude();
        Log.v(TAG, latitude);

        /*------- To get city name from coordinates -------- */
        String cityName = null;
        Geocoder gcd = new Geocoder(getBaseContext(), Locale.getDefault());
        List<Address> addresses;
        try {
            addresses = gcd.getFromLocation(loc.getLatitude(),
                    loc.getLongitude(), 1);
            if (addresses.size() > 0) {
                System.out.println(addresses.get(0).getLocality());
                cityName = addresses.get(0).getLocality();
            }
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        String s = longitude + "\n" + latitude + "\n\nMy Current City is: "
            + cityName;
        editLocation.setText(s);
    }

    @Override
    public void onProviderDisabled(String provider) {}

    @Override
    public void onProviderEnabled(String provider) {}

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {}
}

42 votes

Cela signifie que vous devez être en train de déménager avant qu'il y ait une mise à jour de la localisation ? Pourquoi n'affiche-t-il pas votre position actuelle lors du premier essai après l'installation ?

23 votes

@NiiLaryea car j'obtiens Location en utilisant " onLocationChanged() "qui donne à chaque fois un nouvel emplacement pendant que vous vous déplacez, mais si vous ne voulez qu'une seule fois, vous devez appeler " getLastKnownLocation() "

0 votes

S'il n'y a qu'une seule adresse dans adresses la ligne commençant par cityName = échouera avec une exception. L'utilisation d'accolades permettrait de résoudre le problème.

212voto

CommonsWare Points 402670

Ici est l'aperçu des services de localisation dans Android. Ici est le LocationManager au cœur des services de localisation dans Android.

Malheureusement, il ne semble pas qu'Android soit livré avec des exemples de l'API de localisation, ce qui est quelque peu surprenant.

Vous pouvez télécharger le code source para un de mes livres -- cherchez le Internet/Weather y Service/WeatherPlus démos, chacune d'entre elles utilisant LocationManager . Ou bien, vous pouvez télécharger la source para un autre de mes livres -- cherchez le 23-Location pour des exemples d'utilisation de LocationManager . La plupart des autres didacticiels en ligne sont obsolètes, mais Reto Meier en a un qui devrait être à jour (et je suis sûr que ce sujet est également traité dans son livre).

Malheureusement, vous ne pouvez pas simplement demander à Android votre position actuelle, car le GPS peut mettre un certain temps à obtenir une position. Au lieu de cela, vous devez demander des mises à jour de la localisation et utiliser la première mise à jour que vous obtenez, ou des modèles similaires.

154voto

Maxim Shoustin Points 20035

Voici des informations complémentaires pour d'autres réponses.

Depuis qu'Android a

GPS_PROVIDER and NETWORK_PROVIDER

vous pouvez vous inscrire aux deux et commencer à récupérer des événements à partir de onLocationChanged(Location location) de deux en même temps. Jusqu'ici tout va bien. Maintenant, la question est de savoir si nous avons besoin de deux résultats ou si nous devons prendre le meilleur. Comme je le sais GPS_PROVIDER les résultats sont plus précis que NETWORK_PROVIDER .

Définissons Location champ :

private Location currentBestLocation = null;

Avant de commencer, écoutez Localisation changement, nous allons mettre en œuvre la méthode suivante. Cette méthode renvoie la dernière localisation connue, entre le GPS et le réseau. Pour cette méthode, le plus récent est le mieux.

/**
 * @return the last know best location
 */
private Location getLastBestLocation() {
    Location locationGPS = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    Location locationNet = mLocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

    long GPSLocationTime = 0;
    if (null != locationGPS) { GPSLocationTime = locationGPS.getTime(); }

    long NetLocationTime = 0;

    if (null != locationNet) {
        NetLocationTime = locationNet.getTime();
    }

    if ( 0 < GPSLocationTime - NetLocationTime ) {
        return locationGPS;
    }
    else {
        return locationNet;
    }
}

Chaque fois que nous récupérons un nouvel emplacement, nous le comparons au résultat précédent.

...
static final int TWO_MINUTES = 1000 * 60 * 2;
...

J'ajoute une nouvelle méthode à onLocationChanged :

@Override
public void onLocationChanged(Location location) {

    makeUseOfNewLocation(location);

    if(currentBestLocation == null){
        currentBestLocation = location;
    }

    ....
}

/**
 * This method modify the last know good location according to the arguments.
 *
 * @param location The possible new location.
 */
void makeUseOfNewLocation(Location location) {
    if ( isBetterLocation(location, currentBestLocation) ) {
        currentBestLocation = location;
    }
}

....

/** Determines whether one location reading is better than the current location fix
 * @param location  The new location that you want to evaluate
 * @param currentBestLocation  The current location fix, to which you want to compare the new one.
 */
protected boolean isBetterLocation(Location location, Location currentBestLocation) {
    if (currentBestLocation == null) {
        // A new location is always better than no location
        return true;
    }

    // Check whether the new location fix is newer or older
    long timeDelta = location.getTime() - currentBestLocation.getTime();
    boolean isSignificantlyNewer = timeDelta > TWO_MINUTES;
    boolean isSignificantlyOlder = timeDelta < -TWO_MINUTES;
    boolean isNewer = timeDelta > 0;

    // If it's been more than two minutes since the current location, use the new location,
    // because the user has likely moved.
    if (isSignificantlyNewer) {
        return true;
        // If the new location is more than two minutes older, it must be worse.
    } else if (isSignificantlyOlder) {
        return false;
    }

    // Check whether the new location fix is more or less accurate
    int accuracyDelta = (int) (location.getAccuracy() - currentBestLocation.getAccuracy());
    boolean isLessAccurate = accuracyDelta > 0;
    boolean isMoreAccurate = accuracyDelta < 0;
    boolean isSignificantlyLessAccurate = accuracyDelta > 200;

    // Check if the old and new location are from the same provider
    boolean isFromSameProvider = isSameProvider(location.getProvider(),
                                                currentBestLocation.getProvider());

    // Determine location quality using a combination of timeliness and accuracy
    if (isMoreAccurate) {
        return true;
    } else if (isNewer && !isLessAccurate) {
        return true;
    } else if (isNewer && !isSignificantlyLessAccurate && isFromSameProvider) {
        return true;
    }
    return false;
}

// Checks whether two providers are the same
private boolean isSameProvider(String provider1, String provider2) {
    if (provider1 == null) {
        return provider2 == null;
    }
    return provider1.equals(provider2);
}

....

0 votes

Bonjour, C'est un bel exemple mais pourriez-vous me donner un exemple plus complet ? J'ai du mal à l'intégrer dans mon code existant. En outre, j'utilise uniquement le GPS comme fournisseur.

1 votes

@quantumstates Je pense que c'est assez complet. Il suffit de créer le champ private Location currentBestLocation = null; et ajoutez ` makeUseOfNewLocation(location);` à la méthode onLocationChanged(..)

0 votes

Merci Maxim. J'ai une question. Où utilisez-vous la méthode "getLastBestLocation" ?

91voto

Nirav Ranpara Points 5859

Vous pouvez trouver l'emplacement soit par GPS_PROVIDER or NETWORK_PROVIDER .

Vue d'ensemble de services de localisation dans Android.

Voici un exemple qui tente de trouver l'emplacement en utilisant le GPS. Si votre GPS n'est pas disponible, essayez d'utiliser le réseau pour trouver l'emplacement.

GPSTracker.java

 public class GPSTracker extends Service implements LocationListener {

    private final Context mContext;

    // Flag for GPS status
    boolean isGPSEnabled = false;

    // Flag for network status
    boolean isNetworkEnabled = false;

    // Flag for GPS status
    boolean canGetLocation = false;

    Location location; // Location
    double latitude; // Latitude
    double longitude; // Longitude

    // The minimum distance to change Updates in meters
    private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters

    // The minimum time between updates in milliseconds
    private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute

    // Declaring a Location Manager
    protected LocationManager locationManager;

    public GPSTracker(Context context) {
        this.mContext = context;
        getLocation();
    }

    public Location getLocation() {
        try {
            locationManager = (LocationManager) mContext
                    .getSystemService(LOCATION_SERVICE);

            // Getting GPS status
            isGPSEnabled = locationManager
                    .isProviderEnabled(LocationManager.GPS_PROVIDER);

            // Getting network status
            isNetworkEnabled = locationManager
                    .isProviderEnabled(LocationManager.NETWORK_PROVIDER);

            if (!isGPSEnabled && !isNetworkEnabled) {
                // No network provider is enabled
            } else {
                this.canGetLocation = true;
                if (isNetworkEnabled) {
                    locationManager.requestLocationUpdates(
                            LocationManager.NETWORK_PROVIDER,
                            MIN_TIME_BW_UPDATES,
                            MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                    Log.d("Network", "Network");
                    if (locationManager != null) {
                        location = locationManager
                                .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                        if (location != null) {
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                        }
                    }
                }
                // If GPS enabled, get latitude/longitude using GPS Services
                if (isGPSEnabled) {
                    if (location == null) {
                        locationManager.requestLocationUpdates(
                                LocationManager.GPS_PROVIDER,
                                MIN_TIME_BW_UPDATES,
                                MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                        Log.d("GPS Enabled", "GPS Enabled");
                        if (locationManager != null) {
                            location = locationManager
                                    .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                            if (location != null) {
                                latitude = location.getLatitude();
                                longitude = location.getLongitude();
                            }
                        }
                    }
                }
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }

        return location;
    }

    /**
     * Stop using GPS listener
     * Calling this function will stop using GPS in your app.
     * */
    public void stopUsingGPS(){
        if(locationManager != null){
            locationManager.removeUpdates(GPSTracker.this);
        }
    }

    /**
     * Function to get latitude
     * */
    public double getLatitude(){
        if(location != null){
            latitude = location.getLatitude();
        }

        // return latitude
        return latitude;
    }

    /**
     * Function to get longitude
     * */
    public double getLongitude(){
        if(location != null){
            longitude = location.getLongitude();
        }

        // return longitude
        return longitude;
    }

    /**
     * Function to check GPS/Wi-Fi enabled
     * @return boolean
     * */
    public boolean canGetLocation() {
        return this.canGetLocation;
    }

    /**
     * Function to show settings alert dialog.
     * On pressing the Settings button it will launch Settings Options.
     * */
    public void showSettingsAlert(){
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);

        // Setting Dialog Title
        alertDialog.setTitle("GPS is settings");

        // Setting Dialog Message
        alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");

        // On pressing the Settings button.
        alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int which) {
                Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                mContext.startActivity(intent);
            }
        });

        // On pressing the cancel button
        alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
            }
        });

        // Showing Alert Message
        alertDialog.show();
    }

    @Override
    public void onLocationChanged(Location location) {
    }

    @Override
    public void onProviderDisabled(String provider) {
    }

    @Override
    public void onProviderEnabled(String provider) {
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
    }

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }
}

Activité -AndroidGPSTrackingActivity.java

    public class AndroidGPSTrackingActivity extends Activity {

    Button btnShowLocation;

    // GPSTracker class
    GPSTracker gps;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        btnShowLocation = (Button) findViewById(R.id.btnShowLocation);

        // Show location button click event
        btnShowLocation.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // Create class object
                gps = new GPSTracker(AndroidGPSTrackingActivity.this);

                // Check if GPS enabled
                if(gps.canGetLocation()) {

                    double latitude = gps.getLatitude();
                    double longitude = gps.getLongitude();

                    // \n is for new line
                    Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();
                } else {
                    // Can't get location.
                    // GPS or network is not enabled.
                    // Ask user to enable GPS/network in settings.
                    gps.showSettingsAlert();
                }
            }
        });
    }
}

Mise en page - main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button android:id="@+id/btnShowLocation"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Show Location"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"/>
</RelativeLayout>

AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />

4 votes

Je pense qu'il y a un problème avec cet exemple, vous ne semblez jamais utiliser l'écouteur de localisation. Il utilise toujours GetLastKnownLocation() qui n'est peut-être pas le plus récent.

19 votes

Je dois retirer le vote pour surestimation. Le code ici est décent, mais il est utilisé par beaucoup de gens qui ne le comprennent pas, et il a quelques défauts dans son utilisation de getLastKnownLocation - nous recevons beaucoup de questions de gens qui l'utilisent et obtiennent des emplacements périmés, sans savoir qu'ils sont périmés. La valeur de canGetLocation est également erronée, vous la définissez en fonction de l'activation ou non du fournisseur, mais vous ne vérifiez pas si getLastKnownLocation renvoie une valeur réelle - vous supposez simplement qu'il le fera. Je pense que cela pourrait être amélioré, mais je ne suggérerais pas à quiconque de l'utiliser tel quel.

2 votes

La permission ACCESS_FINE_LOCATION est suffisante selon la documentation Android : Si vous utilisez à la fois NETWORK_PROVIDER et GPS_PROVIDER, vous devez demander uniquement l'autorisation ACCESS_FINE_LOCATION, car elle inclut l'autorisation pour les deux fournisseurs. (La permission pour ACCESS_COARSE_LOCATION n'inclut que la permission pour NETWORK_PROVIDER).

42voto

Gabe Sechan Points 23732

Comme je n'aimais pas une partie du code dans les autres réponses, voici ma solution simple. Cette solution est destinée à être utilisée dans une activité ou un service pour suivre l'emplacement. Elle s'assure de ne jamais renvoyer de données trop anciennes, sauf si vous demandez explicitement des données anciennes. Elle peut être exécutée soit en mode callback pour obtenir des mises à jour au fur et à mesure que nous les recevons, soit en mode poll pour demander les informations les plus récentes.

Interface générique de LocationTracker. Elle nous permet d'avoir plusieurs types de trackers de localisation et de brancher facilement celui qui convient :

package com.gabesechan.android.reusable.location;

import android.location.Location;

public interface LocationTracker {
    public interface LocationUpdateListener{
        public void onUpdate(Location oldLoc, long oldTime, Location newLoc, long newTime);
    }

    public void start();
    public void start(LocationUpdateListener update);

    public void stop();

    public boolean hasLocation();

    public boolean hasPossiblyStaleLocation();

    public Location getLocation();

    public Location getPossiblyStaleLocation();

}

ProviderLocationTracker - cette classe permet de suivre la localisation soit par GPS, soit par réseau.

package com.gabesechan.android.reusable.location;

import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;

public class ProviderLocationTracker implements LocationListener, LocationTracker {

    // The minimum distance to change Updates in meters
    private static final long MIN_UPDATE_DISTANCE = 10; 

    // The minimum time between updates in milliseconds
    private static final long MIN_UPDATE_TIME = 1000 * 60; 

    private LocationManager lm;

    public enum ProviderType{
        NETWORK,
        GPS
    };    
    private String provider;

    private Location lastLocation;
    private long lastTime;

    private boolean isRunning;

    private LocationUpdateListener listener;

    public ProviderLocationTracker(Context context, ProviderType type) {
        lm = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
        if(type == ProviderType.NETWORK){
            provider = LocationManager.NETWORK_PROVIDER;
        }
        else{
            provider = LocationManager.GPS_PROVIDER;
        }
    }

    public void start(){
        if(isRunning){
            //Already running, do nothing
            return;
        }

        //The provider is on, so start getting updates.  Update current location
        isRunning = true;
        lm.requestLocationUpdates(provider, MIN_UPDATE_TIME, MIN_UPDATE_DISTANCE, this);
        lastLocation = null;
        lastTime = 0;
        return;
    }

    public void start(LocationUpdateListener update) {
        start();
        listener = update;

    }

    public void stop(){
        if(isRunning){
            lm.removeUpdates(this);
            isRunning = false;
            listener = null;
        }
    }

    public boolean hasLocation(){
        if(lastLocation == null){
            return false;
        }
        if(System.currentTimeMillis() - lastTime > 5 * MIN_UPDATE_TIME){
            return false; //stale
        }
        return true;
    }

    public boolean hasPossiblyStaleLocation(){
        if(lastLocation != null){
            return true;
        }
        return lm.getLastKnownLocation(provider)!= null;
    }

    public Location getLocation(){
        if(lastLocation == null){
            return null;
        }
        if(System.currentTimeMillis() - lastTime > 5 * MIN_UPDATE_TIME){
            return null; //stale
        }
        return lastLocation;
    }

    public Location getPossiblyStaleLocation(){
        if(lastLocation != null){
            return lastLocation;
        }
        return lm.getLastKnownLocation(provider);
    }

    public void onLocationChanged(Location newLoc) {
        long now = System.currentTimeMillis();
        if(listener != null){
            listener.onUpdate(lastLocation, lastTime, newLoc, now);
        }
        lastLocation = newLoc;
        lastTime = now;
    }

    public void onProviderDisabled(String arg0) {

    }

    public void onProviderEnabled(String arg0) {

    }

    public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
    }
}

Il s'agit du FallbackLocationTracker, qui effectue le suivi à la fois par GPS et par réseau, et utilise la localisation la plus précise.

package com.gabesechan.android.reusable.location;

import android.content.Context;
import android.location.Location;
import android.location.LocationManager;

public class FallbackLocationTracker  implements LocationTracker, LocationTracker.LocationUpdateListener {

    private boolean isRunning;

    private ProviderLocationTracker gps;
    private ProviderLocationTracker net;

    private LocationUpdateListener listener;

    Location lastLoc;
    long lastTime;

    public FallbackLocationTracker(Context context) {
        gps = new ProviderLocationTracker(context, ProviderLocationTracker.ProviderType.GPS);
        net = new ProviderLocationTracker(context, ProviderLocationTracker.ProviderType.NETWORK);
    }

    public void start(){
        if(isRunning){
            //Already running, do nothing
            return;
        }

        //Start both
        gps.start(this);
        net.start(this);
        isRunning = true;
    }

    public void start(LocationUpdateListener update) {
        start();
        listener = update;
    }

    public void stop(){
        if(isRunning){
            gps.stop();
            net.stop();
            isRunning = false;
            listener = null;
        }
    }

    public boolean hasLocation(){
        //If either has a location, use it
        return gps.hasLocation() || net.hasLocation();
    }

    public boolean hasPossiblyStaleLocation(){
        //If either has a location, use it
        return gps.hasPossiblyStaleLocation() || net.hasPossiblyStaleLocation();
    }

    public Location getLocation(){
        Location ret = gps.getLocation();
        if(ret == null){
            ret = net.getLocation();
        }
        return ret;
    }

    public Location getPossiblyStaleLocation(){
        Location ret = gps.getPossiblyStaleLocation();
        if(ret == null){
            ret = net.getPossiblyStaleLocation();
        }
        return ret;
    }

    public void onUpdate(Location oldLoc, long oldTime, Location newLoc, long newTime) {
        boolean update = false;

        //We should update only if there is no last location, the provider is the same, or the provider is more accurate, or the old location is stale
        if(lastLoc == null){
            update = true;
        }
        else if(lastLoc != null && lastLoc.getProvider().equals(newLoc.getProvider())){
            update = true;
        }
        else if(newLoc.getProvider().equals(LocationManager.GPS_PROVIDER)){
            update = true;
        }
        else if (newTime - lastTime > 5 * 60 * 1000){
            update = true;
        }

        if(update){
            if(listener != null){
                listener.onUpdate(lastLoc, lastTime, newLoc, newTime);                  
            }
            lastLoc = newLoc;
            lastTime = newTime;
        }

    }
}

Comme les deux implémentent l'interface LocationTracker, vous pouvez facilement changer d'avis sur celle à utiliser. Pour exécuter la classe en mode sondage, il suffit d'appeler start(). Pour l'exécuter en mode de mise à jour, appelez start(Listener).

Jetez également un coup d'œil à mon article de blog sur le code

0 votes

Pour les curieux, la raison pour laquelle je n'utilise pas les heures intégrées à l'objet Location est que l'API n'existe pas avant l'API 17. Comme je veux garder la compatibilité avec la 14, j'utilise simplement l'heure actuelle. C'est aussi la raison pour laquelle je n'appelle pas getLastKnownLocation très tôt - parce que nous ne pouvons pas obtenir l'heure à partir de cet objet et voir si elle est périmée.

0 votes

Votre code est la meilleure et la plus complète solution que j'ai trouvée au cours des deux derniers jours de recherche sur ce sujet. Il fonctionne sans aucune erreur et comme un charme, c'est impressionnant. Juste une chose, j'ai changé FallbackLocationTracker(Context context, ProviderType type), en public FallbackLocationTracker(Context context) puisque nous n'avons pas besoin d'envoyer un provider à cette classe, elle prend en compte à la fois le GPS et le réseau, n'est-ce pas ?

0 votes

@zeeshan Vous avez raison, et j'ai mis à jour le code ici. Je le ferai sur mon blog la prochaine fois que je trouverai du temps (une ressource difficile à obtenir pour moi ces jours-ci). Comme vous l'avez probablement deviné, j'ai créé le fallback en faisant un copier-coller depuis l'autre classe et je n'ai jamais fait ce nettoyage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X