2009-06-26 8 views
27

Actualmente estoy escribiendo una aplicación en Android que funciona con el GPS. Por el momento, puedo determinar si el GPS está habilitado. Mi problema es que quiero habilitar el GPS en el inicio de la aplicación si está deshabilitado. ¿Cómo puedo hacer esto programáticamente?Cómo habilitar mediante programación GPS en Android Cupcake

+0

depende de la versión de la magdalena. 1.5 no lo permite aparentemente. – D3vtr0n

Respuesta

51

No se puede, comenzando con Android 1.5. Lo máximo que puede hacer es abrir la actividad para permitir que el usuario la active o desactive. Use la acción realizada en android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS para crear una intención para abrir esta actividad.

+3

¿Por qué está deshabilitado? ¿Por qué no permiten a los desarrolladores alternar esto? el widget Power Control puede, por lo que deberíamos poder hacerlo también. ¿No piensas? –

+24

Está deshabilitado por razones de privacidad. Si el usuario quiere GPS desactivado, el usuario debe tener GPS desactivado, punto. – CommonsWare

+0

Estos tipos parecen haberlo resuelto. Desafortunadamente, el apk está ofuscado y no pude entender cómo se logró. URL: https: //market.android.com/details? Id = at.abraxas.powerwidget.free & hl = es –

15
if(!LocationManager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)) 
{ 
    Intent myIntent = new Intent(Settings.ACTION_SECURITY_SETTINGS); 
    startActivity(myIntent); 
} 
+8

Este código no compiló para mí en android 2.2, ya que .isProviderEnabled no es un método estático en LocationManager.El código de trabajo para mí fue el siguiente (disculpas por el formateo) LocationManager locationManager = (LocationManager) getSystemService (LOCATION_SERVICE); if (! LocationManager.isProviderEnabled (LocationManager.GPS_PROVIDER)) { Intención myIntent = new Intent (Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity (myIntent); } –

-5

si su pregunta es a nivel de usuario de Android estas propiedades se encuentran en: "Settings -> Location -> Use wireless networks" -> "Settings -> Location -> Use GPS satellites".

Pero en el desarrollador puede usar la clase "android.provider.Settings.Secure" con los permisos apropiados.

+0

Esta no es la respuesta, la persona que hace la pregunta quería –

3

Usted puede utilizar lo siguiente:

try { 
    Settings.Secure.setLocationProviderEnabled(getContentResolver(), LocationManager.GPS_PROVIDER, true); 
} catch (Exception e) { 
    logger.log(Log.ERROR, e, e.getMessage()); 
} 

pero sólo funcionará si tiene nivel de sistema de firma protección. Por lo que necesita para cocinar su propia imagen que realmente se utilicen:/

6

Este código método puede ser de ayuda para usted

private void turnGPSOnOff(){ 
    String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED); 
    if(!provider.contains("gps")){ 
    final Intent poke = new Intent(); 
    poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider"); 
    poke.addCategory(Intent.CATEGORY_ALTERNATIVE); 
    poke.setData(Uri.parse("3")); 
    sendBroadcast(poke); 
    //Toast.makeText(this, "Your GPS is Enabled",Toast.LENGTH_SHORT).show(); 
    } 
} 
+2

sí ** esto se puede hacer hasta 2.2 (sdk 8) **. Para obtener más información, consulte [Habilitar GPS programáticamente como Tasker] (http://stackoverflow.com/a/5305835/383414) –

0

Se debe utilizar la Location Settings Dialog de Juego servicios que solicita al usuario a los servicios de localización (si es necesario) con solo un clic.

1

Primero compruebe si el servicio de ubicación ya está encendido o no?

Comprobación de servicio de ubicación está activado o no

public boolean isLocationServiceEnabled(){ 
    LocationManager locationManager = null; 
    boolean gps_enabled= false,network_enabled = false; 

    if(locationManager ==null) 
     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    try{ 
     gps_enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
    }catch(Exception ex){ 
     //do nothing... 
    } 

    try{ 
     network_enabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
    }catch(Exception ex){ 
     //do nothing... 
    } 

    return gps_enabled || network_enabled; 

} 

Entonces, finalmente, para abrir si el servicio de ubicación de apagado previamente

if (isLocationServiceEnabled())) { 
      //DO what you need... 
    } else { 
      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setMessage("Seems Like location service is off, Enable this to show map") 
     .setPositiveButton("YES", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 
          Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
            startActivity(intent); 
           } 
          }).setNegativeButton("NO THANKS", null).create().show(); 
       } 
Cuestiones relacionadas