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
publicclassExampleAppextendsActivity{/** Called when the activity is first created. */protectedvoid 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();}}privatevoid showGPSDisabledAlertToUser(){AlertDialog.Builder alertDialogBuilder =newAlertDialog.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",newDialogInterface.OnClickListener(){publicvoid onClick(DialogInterface dialog,int id){Intent callGPSSettingIntent =newIntent(
android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(callGPSSettingIntent);}});
alertDialogBuilder.setNegativeButton("Cancel",newDialogInterface.OnClickListener(){publicvoid onClick(DialogInterface dialog,int id){
dialog.cancel();}});AlertDialog alert = alertDialogBuilder.create();
alert.show();}}
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.
Et dans votre onActivityResult, vous pouvez voir si l'utilisateur l'a activé ou non
protectedvoid 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.
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:
finalLocationManager manager =(LocationManager)context.getSystemService (Context.LOCATION_SERVICE );if(!manager.isProviderEnabled(LocationManager.GPS_PROVIDER ))Toast.makeText(context,"GPS is disabled!",Toast.LENGTH_LONG).show();elseToast.makeText(context,"GPS is enabled!",Toast.LENGTH_LONG).show();
Étape 4: Ou tout simplement, vous pouvez vérifier en utilisant:
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.
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é.
InKotlin:-How to check GPS is enable ornot
val manager = getSystemService(Context.LOCATION_SERVICE)asLocationManagerif(!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()}
Réponses:
La meilleure façon semble être la suivante:
la source
alert
pour 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(); }
)LocationManager.NETWORK_PROVIDER
reviendra vraiDans 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
Votre fichier de classe java doit être
La sortie ressemble à
la source
alert
pour toute l'activité afin de pouvoir laonDestroy()
if(alert != null) { alert.dismiss(); }
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
Si l'utilisateur souhaite activer le GPS, vous pouvez afficher l'écran des paramètres de cette manière.
Et dans votre onActivityResult, vous pouvez voir si l'utilisateur l'a activé ou non
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.
la source
startActivityForResult
avec plusieurs intentions. Lorsque les intentions reviennent à votre activité, vous vérifiez le RequestCode pour voir quelle intention revient et répondez en conséquence.provider
peut être une chaîne vide. J'ai dû changer le chèque en(provider != null && !provider.isEmpty())
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:
Étape 3: Écrivez le code:
Étape 4: Ou tout simplement, vous pouvez vérifier en utilisant:
Étape 5: exécutez vos services en continu pour surveiller la connexion.
la source
Oui, vous pouvez vérifier ci-dessous le code:
la source
Cette méthode utilisera le service LocationManager .
Lien source
la source
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
Ce morceau de code vérifie l'état du GPS
"
la source
Dans vos gestionnaires d'
LocationListener
implémentationonProviderEnabled
et d'onProviderDisabled
événement. Lorsque vous appelezrequestLocationUpdates(...)
, si le GPS est désactivé sur le téléphone,onProviderDisabled
sera appelé; si l'utilisateur active le GPS,onProviderEnabled
sera appelé.la source
la source