2013-04-03 11 views
12

Voglio impedire all'utente di modificare le impostazioni di Wi-Fi, gps e caricamento dalla mia applicazione. L'utente non deve attivare/disattivare wifi e gps mentre esegue la mia applicazione. (Dalla barra di notifica). Esiste un BroadcastReceiver per ascoltare i gps su/off?Come rilevare quando l'utente attiva/disattiva lo stato GPS?

Grazie in anticipo

+11

Fallo solo se desideri che i tuoi utenti ti odino. –

+0

@BurhanKhalid non necessariamente. In questo momento ho questo come requisito aziendale. – Chisko

risposta

3

Questo non è possibile. Non puoi controllare/limitare lo stato dell'hardware secondo il tuo capriccio. Questo sarebbe pericoloso avere nelle API e, giustamente, non esiste alcuna API di questo tipo.

+1

Voglio rendere lo stato gps allo stato precedente ogni volta che l'utente lo modifica. Ho bisogno di qualcosa come broadcastreceiver per ascoltare android.net.conn.CONNECTIVITY_CHANGE –

+2

Quindi ristrutturare la tua domanda perché questo non è quello che stai chiedendo. Stai chiedendo di ** RESTRICTING ** change not listen for it. – JoxTraex

2

È possibile registrare un BroadcastReceiver per l'ascolto di Intent Action PROVIDERS_CHANGED_ACTION. Questo verrà trasmesso quando cambia il provider di posizione configurato. È possibile fare riferimento a questo link.

+0

Funziona con tutte le versioni di Android –

+1

Funzionerà dall'API Livello 9 – Aju

1

È possibile rilevare lo stato del GPS seguendo la strada.

Vedere GpsStatus.Listener. Registrarlo con locationManager.addGpsStatusListener (gpsStatusListener).

Controllare anche questo SO link per una migliore comprensione.

17

È possibile ascoltare lo stato del GPS con un GpsStatus.Listener e registrarlo con il LocationManager.

LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
lm.addGpsStatusListener(new android.location.GpsStatus.Listener() 
{ 
    public void onGpsStatusChanged(int event) 
    { 
     switch(event) 
     { 
     case GPS_EVENT_STARTED: 
      // do your tasks 
      break; 
     case GPS_EVENT_STOPPED: 
      // do your tasks 
      break; 
     } 
    } 
}); 

È necessario avere accesso al contesto (ad esempio in una classe "Attività" o "Applicazione").

+4

Quindi da Nougat in poi 'addGpsStatusListener è stato dichiarato obsoleto in livello API 24. utilizza registerGnssStatusCallback (GnssStatus.Callback) invece. Come per i documenti Android [qui] (https : //developer.android.com/reference/android/location/LocationManager.html#addGpsStatusListener (android.location.GpsStatus.Listener)) – sud007

-1

Non è possibile utilizzare GpsStatus.Listener per fare questo. È necessario utilizzare il ricevitore di trasmissione. Usa LocationManager.PROVIDERS_CHANGE_ACTION. Non utilizzare Intent.ACTION_PROVIDER_CHANE. Buona fortuna!

0

Partendo da API 19 è possibile registrare un BroadcastReceiver per l'ascolto di intenti azione LocationManager.MODE_CHANGED_ACTION

Riferimento: https://developer.android.com/reference/android/location/LocationManager.html#MODE_CHANGED_ACTION

si può ottenere la modalità posizione con

try 
{ 
    int locationMode = android.provider.Settings.Secure.getInt(context.getContentResolver(), android.provider.Settings.Secure.LOCATION_MODE); 
} catch (android.provider.Settings.SettingNotFoundException e) 
{ 
    e.printStackTrace(); 
} 

valore restituito dovrebbe essere uno di questo:

android.provider.Settings.Secure.LOCATION_MODE_BATTERY_SAVING 
android.provider.Settings.Secure.LOCATION_MODE_HIGH_ACCURACY 
android.provider.Settings.Secure.LOCATION_MODE_OFF 
android.provider.Settings.Secure.LOCATION_MODE_SENSORS_ONLY 
12

Beh, ho fatto un sacco di scavi e lo standard addGpsStatusListener(gpsStatusListener) è deprecato in API 24. Beh, per me questo non ha funzionato. Ecco un'altra alternativa a questo.

Se vuoi nella tua app, per ascoltare il cambiamento dello stato del GPS (intendo On/Off per utente). Broadcast è l'approccio migliore.

Implementazione:

/** 
* Following broadcast receiver is to listen the Location button toggle state in Android. 
*/ 
private BroadcastReceiver mGpsSwitchStateReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     if (intent.getAction().matches("android.location.PROVIDERS_CHANGED")) { 
      // Make an action or refresh an already managed state. 
     } 
    } 
}; 

Non dimenticare di registrare e annullare la registrazione di questo in modo efficiente in Frammento/attività del ciclo di vita pure.

registerReceiver(mGpsSwitchStateReceiver, new IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION)); 

Per esempio, se si sta utilizzando in un frammento, registrarsi onResume e annullare la registrazione in onDestroy se, sta assumendo utente alle impostazioni per abilitare la posizione dell'interruttore. L'annullamento della registrazione nel onStop non funzionerà poiché l'attività va a e Frammento viene interrotto.

Bene ci possono essere molte risposte per questa soluzione, ma questa è facile da gestire e utilizzare .

Problemi correlati