Comment savoir si le GPS d'un appareil Android est activé

206

Sur un appareil compatible Android Cupcake (1.5), comment puis-je vérifier et activer le GPS?

Marcus
la source
2
qu'en est-il d'accepter la réponse? :)
dieter

Réponses:

456

La meilleure façon semble être la suivante:

 final LocationManager manager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );

    if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
        buildAlertMessageNoGps();
    }

  private void buildAlertMessageNoGps() {
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
           .setCancelable(false)
           .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
               public void onClick(@SuppressWarnings("unused") final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
                   startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
               }
           })
           .setNegativeButton("No", new DialogInterface.OnClickListener() {
               public void onClick(final DialogInterface dialog, @SuppressWarnings("unused") final int id) {
                    dialog.cancel();
               }
           });
    final AlertDialog alert = builder.create();
    alert.show();
}
Marcus
la source
1
Il s'agit principalement de lancer une intention de voir la configuration GPS, voir github.com/marcust/HHPT/blob/master/src/org/thiesen/hhpt/ui/… pour plus de détails.
Marcus
3
Bel extrait de code. J'ai supprimé les @SuppressWarnings et je ne reçois aucun avertissement ... peut-être qu'ils ne sont pas nécessaires?
span
30
Je conseillerais de déclarer alertpour l'ensemble de l'activité afin que vous puissiez la rejeter dans onDestroy pour éviter une fuite de mémoire ( if(alert != null) { alert.dismiss(); })
Cameron
Et si je suis en mode d'économie de batterie, cela fonctionnera-t-il toujours?
Prakhar Mohan Srivastava
3
@PrakharMohanSrivastava si vos paramètres de localisation sont sur Power-Saving, cela retournera faux, mais LocationManager.NETWORK_PROVIDERreviendra vrai
Tim
129

Dans Android, nous pouvons facilement vérifier si le GPS est activé sur l'appareil ou non à l'aide de LocationManager.

Voici un programme simple à vérifier.

GPS activé ou non: - Ajoutez la ligne d'autorisation utilisateur ci-dessous dans AndroidManifest.xml pour accéder à l'emplacement

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

Votre fichier de classe java doit être

public class ExampleApp extends Activity {
    /** Called when the activity is first created. */
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
            Toast.makeText(this, "GPS is Enabled in your devide", Toast.LENGTH_SHORT).show();
        }else{
            showGPSDisabledAlertToUser();
        }
    }

    private void showGPSDisabledAlertToUser(){
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
        alertDialogBuilder.setMessage("GPS is disabled in your device. Would you like to enable it?")
        .setCancelable(false)
        .setPositiveButton("Goto Settings Page To Enable GPS",
                new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int id){
                Intent callGPSSettingIntent = new Intent(
                        android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                startActivity(callGPSSettingIntent);
            }
        });
        alertDialogBuilder.setNegativeButton("Cancel",
                new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int id){
                dialog.cancel();
            }
        });
        AlertDialog alert = alertDialogBuilder.create();
        alert.show();
    }
}

La sortie ressemble à

entrez la description de l'image ici

entrez la description de l'image ici

béryllium
la source
1
Rien ne se passe lorsque j'essaie votre fonction. Je n'ai eu aucune erreur quand je l'ai testé.
Airikr
Je l'ai fait fonctionner! :) Merci beaucoup mais je ne peux pas voter jusqu'à ce que vous ayez modifié votre réponse: /
Airikr
3
pas de problème @Erik Edgren vous obtenez une solution alors je suis heureux ENjoy ... !!
@ user647826: Excellent! Fonctionne bien. Vous avez sauvé ma nuit
Addi
1
Un conseil: déclarez alertpour toute l'activité afin de pouvoir la onDestroy()if(alert != null) { alert.dismiss(); }
fermer
38

oui, les paramètres GPS ne peuvent plus être modifiés par programme car ce sont des paramètres de confidentialité et nous devons vérifier s'ils sont allumés ou non depuis le programme et les gérer s'ils ne sont pas allumés. vous pouvez informer l'utilisateur que le GPS est désactivé et utiliser quelque chose comme ceci pour montrer l'écran des paramètres à l'utilisateur si vous le souhaitez.

Vérifiez si les fournisseurs de localisation sont disponibles

    String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
    if(provider != null){
        Log.v(TAG, " Location providers: "+provider);
        //Start searching for location and update the location text when update available
        startFetchingLocation();
    }else{
        // Notify users and show settings if they want to enable GPS
    }

Si l'utilisateur souhaite activer le GPS, vous pouvez afficher l'écran des paramètres de cette manière.

Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, REQUEST_CODE);

Et dans votre onActivityResult, vous pouvez voir si l'utilisateur l'a activé ou non

    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        if(requestCode == REQUEST_CODE && resultCode == 0){
            String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
            if(provider != null){
                Log.v(TAG, " Location providers: "+provider);
                //Start searching for location and update the location text when update available. 
// Do whatever you want
                startFetchingLocation();
            }else{
                //Users did not switch on the GPS
            }
        }
    }

C'est une façon de le faire et j'espère que cela aide. Faites-moi savoir si je fais quelque chose de mal.

atteindre
la source
2
salut, j'ai un problème similaire ... pouvez-vous expliquer brièvement ce qu'est le "REQUEST_CODE" et à quoi il sert?
poeschlorn
2
@poeschlorn Anna a publié le lien détaillé ci-dessous. En termes simples, le RequestCode vous permet d'utiliser startActivityForResultavec plusieurs intentions. Lorsque les intentions reviennent à votre activité, vous vérifiez le RequestCode pour voir quelle intention revient et répondez en conséquence.
Farray
2
Le providerpeut être une chaîne vide. J'ai dû changer le chèque en(provider != null && !provider.isEmpty())
Pawan
Comme le fournisseur peut être "", pensez à utiliser int mode = Settings.Secure.getInt (getContentResolver (), Settings.Secure.LOCATION_MODE); Si le mode = 0, le GPS est désactivé
Levon Petrosyan
31

Voici les étapes:

Étape 1: créer des services exécutés en arrière-plan.

Étape 2: Vous avez également besoin de l'autorisation suivante dans le fichier manifeste:

android.permission.ACCESS_FINE_LOCATION

Étape 3: Écrivez le code:

 final LocationManager manager = (LocationManager)context.getSystemService    (Context.LOCATION_SERVICE );

if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) )
  Toast.makeText(context, "GPS is disabled!", Toast.LENGTH_LONG).show(); 
else
  Toast.makeText(context, "GPS is enabled!", Toast.LENGTH_LONG).show();

Étape 4: Ou tout simplement, vous pouvez vérifier en utilisant:

LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
boolean statusOfGPS = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);

Étape 5: exécutez vos services en continu pour surveiller la connexion.

Rakesh
la source
5
Il indique que le GPS est activé même lorsqu'il est éteint.
Ivan V
15

Oui, vous pouvez vérifier ci-dessous le code:

public boolean isGPSEnabled (Context mContext){
    LocationManager locationManager = (LocationManager)
                mContext.getSystemService(Context.LOCATION_SERVICE);
    return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
}
Arun kumar
la source
9

Cette méthode utilisera le service LocationManager .

Lien source

//Check GPS Status true/false
public static boolean checkGPSStatus(Context context){
    LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE );
    boolean statusOfGPS = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    return statusOfGPS;
};
Code Spy
la source
6

Le GPS sera utilisé si l'utilisateur a autorisé son utilisation dans ses paramètres.

Vous ne pouvez plus l'activer explicitement, mais vous n'êtes pas obligé - c'est vraiment un paramètre de confidentialité, donc vous ne voulez pas le modifier. Si l'utilisateur est d'accord avec les applications obtenant des coordonnées précises, ce sera activé. L'API du gestionnaire de localisation utilisera alors le GPS si c'est possible.

Si votre application n'est vraiment pas utile sans GPS et qu'elle est désactivée, vous pouvez ouvrir l'application des paramètres sur l'écran de droite en utilisant une intention afin que l'utilisateur puisse l'activer.


la source
6

Ce morceau de code vérifie l'état du GPS

final LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE );
if ( !manager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
    buildAlertMessageNoGps();
}

"

kashifahmad
la source
3

Dans vos gestionnaires d' LocationListenerimplémentation onProviderEnabledet d' onProviderDisabledévénement. Lorsque vous appelez requestLocationUpdates(...), si le GPS est désactivé sur le téléphone, onProviderDisabledsera appelé; si l'utilisateur active le GPS, onProviderEnabledsera appelé.

Ahmad Pourbafrani
la source
2
In Kotlin: - How to check GPS is enable or not

 val manager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
        if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            checkGPSEnable()

        } 


 private fun checkGPSEnable() {
        val dialogBuilder = AlertDialog.Builder(this)
        dialogBuilder.setMessage("Your GPS seems to be disabled, do you want to enable it?")
                .setCancelable(false)
                .setPositiveButton("Yes", DialogInterface.OnClickListener { dialog, id
                    ->
                    startActivity(Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS))
                })
                .setNegativeButton("No", DialogInterface.OnClickListener { dialog, id ->
                    dialog.cancel()
                })
        val alert = dialogBuilder.create()
        alert.show()
    }
safal bhatia
la source