Android Academy · Leçon

Bien gérer les autorisations de localisation

Localisation au premier plan et localisation précise.

Leçon 4 sur 413 étapes

Bien gérer les autorisations de localisation est une leçon Android Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Android Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Android Academy comprend 4 leçons au total.

Les autorisations sont obligatoires

La localisation est l'une des autorisations les plus sensibles d'Android. La déclarer dans le manifeste ne suffit pas : sur les versions récentes d'Android, vous devez la demander à l'exécution et gérer chaque réponse avec soin.

Cette leçon présente les niveaux d'autorisation, la manière de les demander dans Compose, la gestion des refus ainsi que les nouvelles règles concernant la localisation précise ou approximative et l'accès en arrière-plan.

Les trois autorisations de localisation

Android répartit la localisation en plusieurs niveaux :

  • ACCESS_COARSE_LOCATION — position approximative (à quelques pâtés de maisons près).
  • ACCESS_FINE_LOCATION — position précise (niveau GPS).
  • ACCESS_BACKGROUND_LOCATION — accès lorsque votre application n'est pas au premier plan.

Ne demandez que ce dont vous avez réellement besoin. L'accès en arrière-plan fait l'objet d'un examen supplémentaire sur le Play Store.

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- only if truly needed: -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

Demander des autorisations dans Compose

Les API Activity Result vous fournissent un lanceur pour les boîtes de dialogue d'autorisation. Dans Compose, utilisez rememberLauncherForActivityResult avec le contrat RequestMultiplePermissions.

import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts

val launcher = rememberLauncherForActivityResult(
    ActivityResultContracts.RequestMultiplePermissions()
) { result ->
    val fine = result[Manifest.permission.ACCESS_FINE_LOCATION] == true
    val coarse = result[Manifest.permission.ACCESS_COARSE_LOCATION] == true
    // react to the user's choice
}

Lancer la demande

Déclenchez la boîte de dialogue en appelant launch() avec le tableau d'autorisations — généralement en réponse à l'appui sur un bouton, et non automatiquement au chargement de l'écran.

Button(onClick = {
    launcher.launch(
        arrayOf(
            Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.ACCESS_COARSE_LOCATION
        )
    )
}) {
    Text("Enable location")
}

Vérifier si l'autorisation est déjà accordée

Ne redemandez pas une autorisation déjà accordée. Vérifiez-la avec ContextCompat.checkSelfPermission avant de lancer la demande.

import androidx.core.content.ContextCompat
import android.content.pm.PackageManager

fun hasFineLocation(context: Context): Boolean {
    return ContextCompat.checkSelfPermission(
        context,
        Manifest.permission.ACCESS_FINE_LOCATION
    ) == PackageManager.PERMISSION_GRANTED
}

Précise ou approximative

Depuis Android 12 (API 31), les utilisateurs peuvent accorder l'accès à une position approximative même si vous avez demandé une position précise. Vous devez donc demander les deux autorisations précise et approximative ensemble, et accepter que l'utilisateur vous limite à la position approximative.

Concevez votre fonctionnalité pour qu'elle reste suffisamment opérationnelle avec une position approximative lorsque cela est possible.

// Request both — the system shows a Precise/Approximate toggle
launcher.launch(
    arrayOf(
        Manifest.permission.ACCESS_FINE_LOCATION,
        Manifest.permission.ACCESS_COARSE_LOCATION
    )
)
// If only COARSE comes back granted, you got approximate location.

Présenter une justification

Si l'utilisateur a refusé une première fois, Android vous permet de vérifier shouldShowRequestPermissionRationale. Lorsque cette valeur est vraie, expliquez clairement pourquoi vous avez besoin de la localisation avant de la demander à nouveau.

import androidx.core.app.ActivityCompat

val shouldExplain = ActivityCompat.shouldShowRequestPermissionRationale(
    activity,
    Manifest.permission.ACCESS_FINE_LOCATION
)
if (shouldExplain) {
    // show a dialog: "We use your location to find nearby stores"
}

Gérer un refus définitif

Si l'utilisateur sélectionne Ne plus demander (ou refuse deux fois), le système n'affiche plus la boîte de dialogue. Votre seule solution consiste à l'envoyer dans les paramètres de l'application pour qu'il active lui-même l'autorisation.

import android.content.Intent
import android.provider.Settings
import android.net.Uri

fun openAppSettings(context: Context) {
    val intent = Intent(
        Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
        Uri.fromParts("package", context.packageName, null)
    )
    context.startActivity(intent)
}

Utiliser Accompanist Permissions

La bibliothèque accompanist-permissions regroupe toute cette logique dans un état adapté à Compose. rememberMultiplePermissionsState suit l'état des autorisations et expose un appel launchMultiplePermissionRequest().

import com.google.accompanist.permissions.rememberMultiplePermissionsState

val permissions = rememberMultiplePermissionsState(
    listOf(
        Manifest.permission.ACCESS_FINE_LOCATION,
        Manifest.permission.ACCESS_COARSE_LOCATION
    )
)

if (permissions.allPermissionsGranted) {
    // show the map / read location
} else {
    Button(onClick = { permissions.launchMultiplePermissionRequest() }) {
        Text("Grant location")
    }
}

Règles de localisation en arrière-plan

La localisation en arrière-plan nécessite un flux en deux étapes : accordez d’abord l’accès au premier plan (précis ou approximatif), puis demandez séparément ACCESS_BACKGROUND_LOCATION, ce qui ouvre les paramètres système sur Android 11 et versions ultérieures. Le Play Store exige une justification claire ainsi qu’une politique de confidentialité.

Ne demandez cette autorisation que si votre application a réellement besoin de connaître la position lorsqu’elle est fermée — pour le géorepérage, le suivi d’activité physique, etc.

// Step 1: request foreground first and confirm it's granted.
// Step 2: only then request background:
launcher.launch(
    arrayOf(Manifest.permission.ACCESS_BACKGROUND_LOCATION)
)
// On Android 11+ this sends the user to settings to pick "Allow all the time".

Une carte protégée par une autorisation

Reliez tous les éléments : protégez la carte en fonction de l’état de l’autorisation. Affichez la carte uniquement une fois l’autorisation accordée ; sinon, affichez une invite de demande. Il s’agit de la méthode standard, respectueuse de l’utilisateur.

@Composable
fun LocationGate(permissions: MultiplePermissionsState) {
    when {
        permissions.allPermissionsGranted -> MapScreen()
        else -> Column {
            Text("We need location to show nearby places.")
            Button(onClick = { permissions.launchMultiplePermissionRequest() }) {
                Text("Allow location")
            }
        }
    }
}

Vérification rapide

Depuis Android 12, l’utilisateur peut choisir une localisation Approximative plutôt que Précise. Quelles conséquences cela a-t-il pour votre demande ?

Récapitulatif

Vous savez maintenant comment demander l’accès à la localisation de manière responsable :

  • Déclarez les autorisations approximative/précise (et l’accès en arrière-plan uniquement s’il est essentiel) dans le manifeste.
  • Demandez-les à l’exécution avec les API Activity Result ou accompanist-permissions.
  • Demandez les accès précis et approximatif ensemble afin de prendre en charge le choix précis/approximatif.
  • Affichez une explication et redirigez vers les paramètres de l’application les utilisateurs ayant refusé définitivement l’autorisation.
  • Gérez la localisation en arrière-plan comme un flux séparé en deux étapes, dûment justifié.

Vous avez terminé la partie Cartes et services de localisation : vous pouvez afficher une carte, trouver l’utilisateur, placer des marqueurs et demander les autorisations correctement.

Gratuit pour commencer

Apprends Kotlin avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
36
Leçons
152

Questions Fréquemment Posées

La leçon « Bien gérer les autorisations de localisation » est-elle gratuite ?

Oui — le texte complet de « Bien gérer les autorisations de localisation » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Android Academy, passe à CoddyKit PRO. Le cours Android Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Bien gérer les autorisations de localisation » ?

Localisation au premier plan et localisation précise. Tu pratiques Android Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Android Academy ?

Aucune expérience préalable n'est requise. Android Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Bien gérer les autorisations de localisation » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Android Academy ?

Oui. Chaque leçon Android Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Afficher une carte
  2. Obtenir la position de l’utilisateur
  3. Marqueurs et caméra
  4. Bien gérer les autorisations de localisation
← Retour à Android Academy