8
votes

Écouter l'accès Access Désactiver / Activer dans Paramètres

dans le système d'exploitation Android, dans " Paramètres " -> " Services de localisation ", il y a un bouton à bascule nommé " accès à mon emplacement "Ce qui peut être utilisé pour désactiver et activer l'accès des informations sur l'emplacement des applications.

Actuellement, je développe une application de service de localisation. Je me demande, comment puis-je écouter ce paramètre dans mon projet Android? Y a-t-il un récepteur de diffusion que je peux utiliser pour savoir tout de suite lorsque l'utilisateur désactiver ou activer l'accès " à mon emplacement "?

S'il n'y a pas de récepteur de diffusion pour cela, comment puis-je écouter ce changement dans mon projet Android?


2 commentaires

@ Grlshu, non, je ne veux pas faire ça. Le point clé de ma question est de savoir comment écouter ce paramètre d'accès local.


Stackoverflow.com/a/20673766/1994950 et Stackoverflow.com/a/23756293/1994950 aidera


3 Réponses :


0
votes

Vous pouvez utiliser le code ci-dessous pour vérifier si le service de localisation est activé ou non

 LocationManager lm = null;
 boolean gps_enabled,network_enabled;
    if(lm==null)
        lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    try{
    gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
    }catch(Exception ex){}
    try{
    network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    }catch(Exception ex){}

   if(!gps_enabled && !network_enabled){
        dialog = new AlertDialog.Builder(context);
        dialog.setMessage(context.getResources().getString(R.string.gps_network_not_enabled));
        dialog.setPositiveButton(context.getResources().getString(R.string.open_location_settings), new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface paramDialogInterface, int paramInt) {
                // TODO Auto-generated method stub
                Intent myIntent = new Intent( Settings.ACTION_SECURITY_SETTINGS );
                context.startActivity(myIntent);
                //get gps
            }
        });
        dialog.setNegativeButton(context.getString(R.string.Cancel), new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface paramDialogInterface, int paramInt) {
                // TODO Auto-generated method stub

            }
        });
        dialog.show();

    }


2 commentaires

Bonjour, ma question n'est pas sur la manière de vérifier la valeur, mais de savoir comment écouter le changement, ce qui signifie comment obtenir une notification dans le code que l'utilisateur a modifié cet accès dans les paramètres et obtenez la valeur modifiée.


@Grishu qui est incorrect. Avez-vous essayé la solution de USMAN ci-dessous?



6
votes

Cela fonctionne pour moi:

Ajouter récepteur au fichier manifeste: p> xxx pré>

Vérifiez les deux fournisseurs de localisation dans le récepteur: P>

public class LocationProviderChangedReceiver  extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {

        boolean anyLocationProv = false;
        LocationManager locationManager = (LocationManager) MyMainActivity.context.getSystemService(Context.LOCATION_SERVICE);

        anyLocationProv |= locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        anyLocationProv |=  locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

        Log.i("", "Location service status" + anyLocationProv);


    }

}


2 commentaires

Le récepteur de diffusion manifeste ne doit être utilisé que si l'application a besoin d'emplacement à l'arrière-plan. Il devrait utiliser un récepteur de diffusion d'exécution autrement


Cela ne fonctionnera pas si votre application cible Android 8.0 (niveau d'API 26) ou ci-dessus: Enregistrement des récepteurs de diffusion pour les émissions implicites dans le manifeste a été désactivé



1
votes

Vous pouvez le faire beaucoup plus simple de cette façon. Dans votre méthode Browcastreceiver's ONRECEIVE () STRT>:

    ContentResolver contentResolver = getContext().getContentResolver();
    // Find out what the settings say about which providers are enabled
    int mode = Settings.Secure.getInt(
            contentResolver, Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF);

    if (mode == Settings.Secure.LOCATION_MODE_OFF) {
        // Location is turned OFF!
    } else {
        // Location is turned ON!
    }


0 commentaires