2012-04-12 31 views
5

Puedo verificar si el GPS está encendido o no usando isProviderEnabled(). Si no está activado, estoy lanzando un intento para que el usuario pueda habilitar el GPS. Al final estoy nuevamente comprobando si el GPS está habilitado o no por el usuario. Si el usuario no habilita el GPS y sale, todavía isProviderEnabled() devuelve NULL. ¿Cuál podría ser el problema? Por favor guíame.El GPS no está habilitado pero isProviderEnabled() está devolviendo verdadero

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

Gracias, Biplab

Respuesta

8

Verificar GPS permitirá el uso de este código y que me haga saber lo que suceda,

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

Gracias, Es perfecto como quería. –

+1

No funcionó para mí, lo probé con gps activado y desactivado, y obtuve el mismo brindis en ambas ocasiones. –

+0

@BillGary eso probablemente se deba a que su red o proveedor pasivo aún está activo. Esa cadena de proveedor debe contener TODOS los proveedores habilitados, y no solo GPS. Su verificación de nulo solo nos dice que un proveedor está habilitado, y no cuál es realmente. – Guardanis

5

he tenido este problema en un dispositivo físico real.

Hice algunas pruebas usando ubicaciones simuladas en mi dispositivo físico Android, y luego volví a las ubicaciones reales usando el GPS (el código estaba limpio de todas las ubicaciones simuladas). A este punto, ya sea que el GPS se haya detenido o no, la aplicación siempre devolverá "verdadero" (GPS activado) y por alguna razón ya no registrará ubicaciones reales.

En este caso, el reinicio del dispositivo físico resolvió el problema.

+0

Me estaba preocupando mi aplicación. Esto ayudó mucho. ¡Gracias! Además, ¿hay alguna manera de restablecer las ubicaciones simuladas programáticamente? Me gustaría garantizar la integridad de mi aplicación, incluso para los trozos ligeramente notorios de mi público. – SlashG

+0

No estoy exactamente seguro de lo que está preguntando, pero para mí (cuando lo probé) era la única forma en que podía restablecer las ubicaciones. – Pelpotronic

+0

Simplemente activando y desactivando la ubicación hace el trabajo, esto es lo que estoy haciendo con mi aplicación, simplemente haciendo que el usuario reinicie su GPS y luego use 'BroadcastReciever' para asegurarse de que el usuario realmente lo reinicie. – Dennis

0

tenía el mismo problema por el que isProviderEnabled() volvería cierto en dispositivos < piruleta

Sobre la base de la respuesta de user370305 He actualizado mi método de la siguiente manera:

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; 

    } 

} 
Cuestiones relacionadas