Sur un appareil Android Cupcake (1.5), comment vérifier et activer le GPS ?
Il s'agit principalement de lancer un projet pour voir la configuration du GPS, voir github.com/marcust/HHPT/blob/master/src/org/thiesen/hhpt/ui/ pour plus de détails.
Sur un appareil Android Cupcake (1.5), comment vérifier et activer le GPS ?
La meilleure solution 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();
}
Il s'agit principalement de lancer un projet pour voir la configuration du GPS, voir github.com/marcust/HHPT/blob/master/src/org/thiesen/hhpt/ui/ pour plus de détails.
Joli bout de code. J'ai supprimé les @SuppressWarnings et je ne reçois aucun avertissement... peut-être sont-ils inutiles ?
Je conseille de déclarer alert
pour l'ensemble de l'activité afin de pouvoir l'écarter dans onDestroy pour éviter une fuite de mémoire ( if(alert != null) { alert.dismiss(); }
)
Sous Android, nous pouvons facilement vérifier si le GPS est activé ou non dans l'appareil à l'aide du LocationManager.
Voici un programme simple à vérifier.
GPS activé ou non :- Ajoutez la ligne de permission de l'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 devrait ê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();
}
}
Le résultat ressemblera à
Oui, les paramètres GPS ne peuvent plus être modifiés par programme car il s'agit de paramètres de confidentialité et nous devons vérifier s'ils sont activés ou non à partir du programme et les gérer s'ils ne le sont pas. 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érifier si les fournisseurs de services 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 résultat 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 procéder et j'espère que cela vous aidera. Faites-moi savoir si je fais quelque chose de mal.
Bonjour, j'ai un problème similaire... pouvez-vous expliquer brièvement ce qu'est le "REQUEST_CODE" et à quoi il sert ?
@poeschlorn Anna a posté le lien détaillé ci-dessous. En termes simples, le RequestCode vous permet d'utiliser startActivityForResult
avec plusieurs intentions. Lorsque les intentions reviennent dans votre activité, vous vérifiez le RequestCode pour voir quelle intention revient et vous répondez en conséquence.
Les provider
peut être une chaîne vide. J'ai dû changer la vérification en (provider != null && !provider.isEmpty())
Voici la marche à suivre :
Étape 1 : Créer des services fonctionnant en arrière-plan.
Étape 2 : Vous devez également obtenir les autorisations suivantes dans le fichier Manifest :
android.permission.ACCESS_FINE_LOCATION
Étape 3 : Écrire 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 : Vous pouvez aussi simplement 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 contrôler la connexion.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
2 votes
Et si l'on acceptait la réponse ? :)