Demande d’activation GPS à l’utilisateur.

Dimanche 22 juillet 2012, 15:53

Bonjour à tous,

Certaines applications ont besoin de la localisation GPS pour pouvoir fonctionner, hors l’utilisateur ne l’a pas forcément activé, alors j’ai créé une simple classe, qui lui demande l’activation, avant de lancer mon activity « main » qui étends le LocationListener (qui gère donc la localisation).

Voici la classe en elle même:

/**
 * classe qui demande la permission au gps
 * 
 * @author l.hellofs
 * 
 */
public class PermissionGps extends Activity {
    private void createGpsDisabledAlert() {
        AlertDialog.Builder localBuilder = new AlertDialog.Builder(this);
        localBuilder
            .setMessage("Le GPS est inactif, voulez-vous l'activer ?")
            .setCancelable(false)
            .setPositiveButton("Activer GPS ",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface paramDialogInterface, int paramInt) {
                        PermissionGps.this.showGpsOptions();
                    }
                }
            );
        localBuilder.setNegativeButton("Ne pas l'activer ",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface paramDialogInterface, int paramInt) {
                    paramDialogInterface.cancel();
                    PermissionGps.this.finish();
                }
            }
        );
        localBuilder.create().show();
    }

    private void showGpsOptions() {
        startActivity(new Intent("android.settings.LOCATION_SOURCE_SETTINGS"));
        finish();
    }

    protected void onCreate(Bundle paramBundle) {
        super.onCreate(paramBundle);
        createGpsDisabledAlert();
    }
}

Je la lance avec startActivity(), mais on pourrait faire une startActivityForResult() pour récupérer s’il a accepté ou non.

/** Récupère le locationManager qui gère la localisation */
LocationManager locManager;
locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
/** Test si le gps est activé ou non */
if (!locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
    /** on lance notre activity (qui est une dialog) */
    Intent localIntent = new Intent(this, PermissionGps.class);
    localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(localIntent);
}

/** Ensuite on demande a ecouter la localisation (dans la classe qui implémente le LocationListener*/
if (locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
    locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, this.minute, this.metre * 100, this);
} else {
    locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, this.minute, this.metre * 100, this);
}

Par la suite, je peux faire le test si le gps est activé ou non et écouté soit par le gps, soit par le network (wifi/3G).

Voilà, j’espère que cette petite astuce vous aidera. PS: n’oubliez pas de défnir la permission GPS et Wifi/Cell-ID pour gérer la localisation dans votre application (et l’activity PermissionGps)

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

Bonne journée !

A propos de l'auteur
Laurent

Développeur Java & mobile, plus particulièrement sur Android, passionné par les technologies mobile et la S-F, je travail pour VLS Henrotte une entreprise basé à Liège. Autodidacte, motivé et surtout très ouvert à tout ce qui approche de l’innovation ou la révolution, je partage mes connaissances ou mes sources. Je suis aussi un twitterfou

Laisser un commentaire

Commentaires

RT @Fritte7: Demande d’activation GPS à l’utilisateur.: #android #dev http://t.co/NFxtmA2l

merci très utile

[...] Le toast est une des façons d’informer l’utilisateur des actions qu’il a réalisé, où qui se serait produite en tâche de fond, qui n’a pas besoin d’interaction avec l’utilisateur. Je m’explique, quand je demande l’utilisation du GPS, mais que ce dernier est éteint, je demande l’activation via une dialogue. Comme mon précédent post (voir ici)  [...]

Si tu peux rajouter les imports nécessaire ce serait super.