Tourner sur les Fournisseurs d'Emplacement par programmation sous Android
-
13-11-2019 - |
Question
Est-il possible de tourner sur LocationProviders(GPS Fournisseur/les Fournisseurs de Réseau) sur l'Appareil par programmation, si il est éteint?
La solution
Non, ce n'est pas, Mais vous pouvez ouvrir la fenêtre Paramètres de lieu de localisation:
context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
Autres conseils
Activation de l'emplacement avec le mode haute précision ou économie de batterie sans que l'utilisateur ait besoin de visiter les paramètres
http://android-developers.blogspot.in/2015/03/google-play-Services-70-flaces-Everyone.html
private void turnGPSOn(){
String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
if(!provider.contains("gps")){ //if gps is disabled
final Intent poke = new Intent();
poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");
poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
poke.setData(Uri.parse("3"));
sendBroadcast(poke);
}
}
Mais ce code ne supporte que jusqu'à APK 8.
Oui, mais vous devez être un super utilisateur (sudo), votre appareil doit être enraciné.
Avec la récente mise à jour de la Guimauve, même lorsque le paramètre de Localisation est activée, votre application va exiger explicitement demander la permission.La méthode recommandée pour ce faire est de montrer les Autorisations section de votre application dans laquelle l'utilisateur peut choisir la permission requise.L'extrait de code pour faire ceci est comme ci-dessous:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Location Permission");
builder.setMessage("The app needs location permissions. Please grant this permission to continue using the features of the app.");
builder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION);
}
});
builder.setNegativeButton(android.R.string.no, null);
builder.show();
}
} else {
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
boolean isGpsProviderEnabled, isNetworkProviderEnabled;
isGpsProviderEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
isNetworkProviderEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if(!isGpsProviderEnabled && !isNetworkProviderEnabled) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Location Permission");
builder.setMessage("The app needs location permissions. Please grant this permission to continue using the features of the app.");
builder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
}
});
builder.setNegativeButton(android.R.string.no, null);
builder.show();
}
}
Et remplacer la onRequestPermissionsResult
la méthode ci-dessous:
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case PERMISSION_REQUEST_COARSE_LOCATION: {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "coarse location permission granted");
} else {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);
}
}
}
}
Une autre approche est que vous pouvez également utiliser l' SettingsApi pour savoir lequel fournisseur d'emplacement(s) sont activés.Si aucun n'est activé, vous pouvez demander à une boîte de dialogue pour modifier le réglage à partir de l'application.
Utilisez le code suivant pour démarrer GPS
locationManager = ( LocationManager ) getSystemService ( Context.LOCATION_SERVICE );
locationListener = new LocationListener();
locationManager.requestLocationUpdates ( LocationManager.GPS_PROVIDER, 0, 0, locationListener );
et le code suivant pour arrêter GPS
locationManager.removeUpdates( locationListener );
Pour plus de détails, voir le Documentations pour emplacementManager et pour locationListener .