dans le système d'exploitation Android, dans " Paramètres forts>" -> " Services de localisation strong>", il y a un bouton à bascule nommé " 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 " S'il n'y a pas de récepteur de diffusion pour cela, comment puis-je écouter ce changement dans mon projet Android? P>
3 Réponses :
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();
}
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?
Cela fonctionne pour moi:
Ajouter récepteur au fichier manifeste: p> 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);
}
}
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é
Vous pouvez le faire beaucoup plus simple de cette façon. Dans votre méthode Browcastreceiver's 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!
}
@ 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