web-dev-qa-db-fra.com

Changer le mode de localisation en haute précision par programme Android

Est-il possible d’obtenir des informations sur le mode de localisation sélectionné par l’utilisateur parmi les trois modes sous les options de paramètres de localisation

1.Haute Précision

2.Battery Saving

3.GPS seulement

Je souhaite vérifier par programme si l'utilisateur a sélectionné le mode Haute précision, sinon l'activer automatiquement. C'est possible ? S'il vous plaît des conseils.

25
ik024

Il est possible d’obtenir le mode d’emplacement actuel du périphérique depuis le API niveau 19 (KitKat):

public int getLocationMode(Context context)
{
return Settings.Secure.getInt(activityUnderTest.getContentResolver(), Settings.Secure.LOCATION_MODE);

}

Voici les valeurs de retour possibles (voir ici ):

0 = LOCATION_MODE_OFF
1 = LOCATION_MODE_SENSORS_ONLY
2 = LOCATION_MODE_BATTERY_SAVING
3 = LOCATION_MODE_HIGH_ACCURACY

Donc vous voulez quelque chose comme

if(getLocationMode(context) == 3)
{
// do stuff
}

Malheureusement, vous ne pouvez pas définir le mode de localisation par programme, mais vous pouvez envoyer l'utilisateur directement à l'écran des paramètres où il peut le faire:

startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
45
kaolick

Vous pouvez fournir des critères dans LocationMamager.requestLocationUpdates. En tant que critère, vous pouvez fournir l'une des valeurs suivantes pour sélectionner la précision requise.

Constants
int ACCURACY_COARSE A constant indicating an approximate accuracy requirement
int ACCURACY_FINE   A constant indicating a finer location accuracy requirement
int ACCURACY_HIGH   a constant indicating a high accuracy requirement - may be used for horizontal, altitude, speed or bearing accuracy.
int ACCURACY_LOW    A constant indicating a low location accuracy requirement - may be used for horizontal, altitude, speed or bearing accuracy.
int ACCURACY_MEDIUM A constant indicating a medium accuracy requirement - currently used only for horizontal accuracy.

Voir http://developer.Android.com/reference/Android/location/LocationManager.html#requestLocationUpdates(long , float, Android.location.Criteria, Android.app.PendingIntent)

3
userM1433372

Depuis le niveau 28 de l'API, vous devez utiliser LocationManager.isProviderEnabled () pour savoir si un fournisseur spécifique est activé ou non. 

Changer le paramètre par programme depuis votre application n'est malheureusement pas possible.

0
Magnus W