2013-04-03 14 views
12

Ich möchte den Benutzer von Wifi, GPS und Laden von Einstellungen aus meiner Anwendung zu blockieren. Der Benutzer brauche nicht ein-/ausschalten Wifi und GPS beim Ausführen meiner Anwendung. (Von der Benachrichtigungsleiste) .Ist es BroadcastReceiver existieren für das Hören von GPS auf /aus?Wie erkennt man, wenn der Benutzer den GPS-Status ein-/ausschaltet?

Vielen Dank im Voraus

+11

Tun Sie dies nur, wenn Sie möchten, dass Ihre Benutzer Sie hassen. –

+0

@BurhanKhalid nicht unbedingt. Gerade jetzt habe ich das als Geschäftsanforderung. – Chisko

Antwort

3

Dies ist nicht möglich. Sie können den Zustand der Hardware nicht nach Belieben steuern/einschränken. Dies wäre in den APIs gefährlich und zu Recht, so dass keine solche API existiert.

+1

Ich möchte den GPS-Zustand in den vorherigen Zustand, wenn der Benutzer es ändert.Ich brauche etwas wie Broadcastreceiver zum Anhören android.net.conn.CONNECTIVITY_CHANGE –

+2

Dann restrukturieren Sie Ihre Frage, weil das nicht, was Sie fragen. Sie fragen nach ** RESTRICTING ** Änderung nicht darauf achten. – JoxTraex

2

Sie können einen BroadcastReceiver für das Abhören von Intent Action PROVIDERS_CHANGED_ACTION registrieren. Dies wird gesendet, wenn sich der konfigurierte Standortanbieter ändert. Sie können diese link verweisen.

+0

Funktioniert für alle Android-Versionen –

+1

Es funktioniert von API Level 9 – Aju

1

Sie können den Status von GPS erkennen, indem Sie folgen.

Betrachten Sie GpsStatus.Listener. Registrieren Sie es mit locationManager.addGpsStatusListener (gpsStatusListener).

Überprüfen Sie auch diese SO link zum besseren Verständnis.

17

Sie können den GPS-Status mit einem GpsStatus.Listener abhören und mit dem LocationManager registrieren.

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

Sie benötigen Zugriff auf den Kontext haben (zum Beispiel in einer „Aktivität“ oder „Application“ Klasse).

+4

Also von Nougat ab 'adGpsStatusListener wurde in API-Ebene 24 veraltet. Verwenden Sie registerGnssStatusCallback (GnssStatus.Callback) stattdessen. Wie in den Android-Dokumenten [hier] (https : //developer.android.com/reference/android/location/LocationManager.html#addGpsStatusListener (android.location.GpsStatus.Listener)) – sud007

-1

Sie können nicht GpsStatus.Listener, dies zu tun. Sie müssen Broadcast-Empfänger verwenden. Verwenden Sie LocationManager.PROVIDERS_CHANGE_ACTION. Verwenden Sie Intent.ACTION_PROVIDER_CHANE nicht. Viel Glück!

0

von Start API 19 können Sie einen BroadcastReceiver registrieren für das Hören von Vorsatz Aktion LocationManager.MODE_CHANGED_ACTION

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

Sie können mit dem Standort-Modus erhalten

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

Wert sollte eine sein, zurück davon:

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

Nun habe ich eine Menge Digging gemacht und addGpsStatusListener(gpsStatusListener) ist in API 24 veraltet. Gut für mich hat das nicht mal funktioniert. Hier ist eine andere Alternative dazu.

Wenn Sie in Ihrer App wollen, um den GPS-Status zu hören, ändern Sie (ich meine On/Off von Benutzer). Broadcast ist der beste Ansatz.

Umsetzung:

/** 
* 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. 
     } 
    } 
}; 

das nicht effizient als auch in Fragmente/Activity Lifecycle zu registrieren und deregistrieren Vergessen.

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

Zum Beispiel, wenn Sie in einem Fragment verwenden, registrieren in onDestroy in onResume und abzumelden, wenn Sie sind Benutzer auf die Einstellungen unter den Standort wechseln zu ermöglichen. Das Aufheben der Registrierung in onStop funktioniert nicht, da Ihre Aktivität zu geht und das Fragment gestoppt wird.

Nun, es gibt vielleicht viele Antworten für diese Lösung, aber diese ist einfach zu verwalten und zu verwenden .

Verwandte Themen