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