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 !