2012-04-12 20 views
5

Ich kann überprüfen, ob GPS isProviderEnabled() verwendet oder nicht. Wenn es nicht aktiviert ist, starte ich Absicht, damit der Benutzer GPS aktivieren kann. Am Ende überprüfe ich wieder, ob GPS vom Benutzer aktiviert ist oder nicht. Wenn der Benutzer GPS nicht aktiviert und nicht herauskommt, gibt isProviderEnabled() NULL zurück. Was könnte das Problem sein? Bitte führen Sie mich.GPS ist nicht aktiviert, aber isProviderEnabled() gibt true zurück

String provider = LocationManager.GPS_PROVIDER; 
    // Check if GPS is enabled 
    boolean enabled = myLocationManager.isProviderEnabled(provider); 

    if (!enabled) { 
        // GPS not enabled 
     Log.d("", "Provider " + provider + " is not enabled"); 
     Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
     startActivity(intent); 
        // Consider the case when user does not enable GPS and come out. 
    } else { 
     Log.d("", "Provider is enabled"); 

    }  

      // Re-check if user has enabled or not. (Note: case: user has not enabled GPS) 
    enabled = myLocationManager.isProviderEnabled(provider); 
    if(!enabled) 
    { 

     Log.d("","provider not enabled"); 
    } 
      else 
      { 
        // Control is coming here though user has not enabled GPS in settings 
        Log.d("","GPS is enabled"); 
      } 

Danke, Biplab

Antwort

8

prüfen GPS ermöglichen diesen Code verwenden und lassen Sie mich wissen, was passieren,

private void CheckEnableGPS(){ 
    String provider = Settings.Secure.getString(getContentResolver(), 
     Settings.Secure.LOCATION_PROVIDERS_ALLOWED); 
     if(!provider.equals("")){ 
      //GPS Enabled 
     Toast.makeText(AndroidEnableGPS.this, "GPS Enabled: " + provider, 
      Toast.LENGTH_LONG).show(); 
     }else{ 
     Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS); 
      startActivity(intent); 
     } 
    } 
+0

Danke, es ist perfekt, wie ich wollte. –

+1

Hat nicht für mich funktioniert, ich habe es mit GPS aktiviert und deaktiviert versucht, und bekam den gleichen Toast beide Male. –

+0

@BillGary das liegt wahrscheinlich daran, dass Ihr Netzwerk- oder Passive-Provider auch noch aktiv ist. Diese Provider-Zeichenfolge sollte ALLE aktivierten Provider und nicht nur GPS enthalten. Seine Überprüfung auf Null sagt uns nur, dass ein Provider aktiviert ist, und nicht was tatsächlich ist. – Guardanis

5

Ich habe auf einer tatsächlichen physischen Gerät dieses Problem hatte.

Ich habe ein paar Tests mit falschen Orten auf meinem physischen Android-Gerät durchgeführt und bin dann mit dem GPS zurück zu realen Orten gewechselt (der Code war sauber von allen Scheinorten). A dieser Punkt, ob das GPS gestoppt wurde oder nicht, die Anwendung würde immer "wahr" (GPS aktiviert) und aus irgendeinem Grund nicht mehr echte Standorte registrieren.

In diesem Fall wurde das Problem durch einen Neustart des physischen Geräts behoben.

+0

Ich machte mir Sorgen um meine App. Das hat sehr geholfen. Vielen Dank! Gibt es auch eine Möglichkeit zum programmgesteuerten Zurücksetzen von Scheinorten? Ich möchte die Integrität meiner App auch für die leicht berüchtigten Teile meines Publikums sicherstellen. – SlashG

+0

Ich bin mir nicht ganz sicher, was du verlangst, aber für mich (als ich es ausprobiert habe) war es die einzige Möglichkeit, die Orte neu zu setzen. – Pelpotronic

+0

Einfach den Standort ein- und ausschalten macht den Job, das mache ich mit meiner App, indem ich den Benutzer einfach dazu veranlasse, sein GPS neu zu starten und dann 'BroadcastReciever' zu verwenden, um sicherzustellen, dass der Benutzer es tatsächlich neu startet. – Dennis

0

Hatte das gleiche Problem, bei dem isProviderEnabled() < Lutscher

auf Geräten true zurückgeben würde Antwort Basierend auf user370305 der ich meine Methode wie folgt aktualisiert:

private boolean isLocationEnabled() { 

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 

     String provider = Settings.Secure.getString(getContentResolver(), 
       Settings.Secure.LOCATION_PROVIDERS_ALLOWED); 

     return !provider.equals(""); 

    } else { 

     LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
     boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

     return gps || network; 

    } 

} 
Verwandte Themen