Question

Est-il possible de tourner sur LocationProviders(GPS Fournisseur/les Fournisseurs de Réseau) sur l'Appareil par programmation, si il est éteint?

Était-ce utile?

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 .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top