7

in Android OS, in "Impostazioni " -> "Servizi di localizzazione ", c'è un interruttore chiamato "Accesso alla mia posizione" che può essere utilizzato per disabilitare & abilitare l'accesso alle informazioni sulla posizione dalle app.Ascoltate posizione disabilitare l'accesso/abilitare nelle impostazioni

Attualmente sto sviluppando un'applicazione di servizio di localizzazione. Mi chiedo, come posso ascoltare questa impostazione nel mio progetto Android? C'è un ricevitore broadcast che posso usare per sapere subito quando l'utente disabilita o abilita "Access to my location"?

Se non ci sono ricevitori per la trasmissione, come posso ascoltare questa modifica nel mio progetto Android?

+1

@ GrlsHu, no, io non voglio farlo. Il punto chiave della mia domanda è come ascoltare questa impostazione di accesso alla posizione. – Mellon

+0

http://stackoverflow.com/a/20673766/1994950 e http://stackoverflow.com/a/23756293/1994950 aiuteranno – Kushal

risposta

0

È possibile utilizzare il codice sottostante per verificare se Location Service Abilita o no

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

Ciao, la mia domanda non è su come controllare il valore, ma su come ascoltare la modifica, il che significa che come ottenere una notifica nel codice che l'utente ha modificato questo accesso di posizione nelle impostazioni e quindi ottenere il valore modificato. – Mellon

+0

@GrIsHu Che non è corretto. Hai provato la soluzione di Usman qui sotto? –

5

Questo funziona per me:

Aggiungere ricevitore per il file manifesto:

<receiver 
     android:name="com.eegeo.location.LocationProviderChangedReceiver"> 
     <intent-filter> 
      <action android:name="android.location.PROVIDERS_CHANGED" /> 
     </intent-filter> 
    </receiver> 

controllare sia fornitori di localizzazione nel ricevitore:

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); 


    } 

} 

Anche se questo ricevitore è chiamato più di una volta per ovvi motivi, ma questo vi dirà lo stato.

+1

Il ricevitore di trasmissione manifest deve essere utilizzato solo se l'app necessita di una posizione in background. In caso contrario, dovrebbe utilizzare un ricevitore broadcast di runtime –

1

Si può fare molto più semplice in questo modo. In OnReceive del BroadcastReceiver() Metodo:

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! 
    } 

~ Grazie a questo codice: LocationManagerTest.java

Problemi correlati