Habilitación del modo de ubicación Alta precisión o ahorro de batería, mediante progtwigción, sin que el usuario deba visitar Configuración

Por qué pregunto esto: (también el motivo para probarlo en una aplicación)

Sucede cuando utilizamos Google Maps en Lollipop . Incluso si la Ubicación está deshabilitada, se enciende, en modo de alta precisión después de la entrada del usuario desde la aplicación Mapas, sin tener que visitar Configuración.

Se puede lograr una funcionalidad similar para habilitar Bluetooth, donde la acción se inicia en mi aplicación; el usuario necesita hacer una elección, pero el usuario no se redirige a la Configuración, usando:

startActivity(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE));

que podría encontrarse en BluetoothAdapter , ahora sabemos que no hay LocationAdapter, así que busqué en gms-> LocationServices , básicamente casi todo bajo las referencias de la API de ubicación , android.location.LocationManager pero no parece que ACTION_REQUEST_ENABLE esté disponible todavía.

Espero que haya otro método para lo mismo, y más gente lo haya probado.

Tenga en cuenta:
context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); no funciona así.

ACTUALIZACIÓN 2 :

GoogleSamples; LocationSettings – para referencia de código.

Este ejemplo se basa en el ejemplo de LocationUpdates incluido en este repository y permite al usuario actualizar la configuración de ubicación del dispositivo mediante un cuadro de diálogo de ubicación.

Utiliza SettingsApi para garantizar que la configuración del sistema del dispositivo esté configurada correctamente para las necesidades de ubicación de la aplicación.


ACTUALIZACIÓN 1 :

Servicios de Google Play, versión 7.0 (marzo de 2015) lanzados …

Configuración de ubicación : mientras que FusedLocationProviderApi combina múltiples sensores para brindarle la ubicación óptima, la precisión de la ubicación que recibe su aplicación depende en gran medida de la configuración habilitada en el dispositivo (GPS, wifi, modo avión y otros). Con la nueva clase de SettingsApi, puede abrir un cuadro de diálogo Configuración de ubicación que muestra un control de un toque para que los usuarios cambien su configuración sin abandonar su aplicación.

Usando la interfaz pública SettingsApi

  • Determine si la configuración del sistema relevante está habilitada en el dispositivo para llevar a cabo la solicitud de ubicación deseada.
  • Opcionalmente, invoque un cuadro de diálogo que le permita al usuario habilitar la configuración de ubicación necesaria con un solo toque.


Dejando la parte anterior para referencia:
Actualizar / Responder
Para todos los que buscan esta respuesta, Google Play Services 7.0
Agrega API para detectar lugares y conectarse a dispositivos cercanos, mejora en anuncios móviles, datos de estado físico, configuraciones de ubicación y más

En Google Play Services 7.0, estamos presentando un mecanismo estándar para verificar que las configuraciones de ubicación necesarias estén habilitadas para que una LocationRequest determinada tenga éxito. Si hay posibles mejoras, puede mostrar un control de un solo toque para que el usuario cambie su configuración sin salir de su aplicación.

exactamente esto

Esta API ofrece una gran oportunidad para una experiencia de usuario mucho mejor, especialmente si la información de ubicación es crítica para la experiencia del usuario de su aplicación, como fue el caso de Google Maps cuando integraron el cuadro de diálogo Configuración de ubicación y vieron un aumento dramático en la número de usuarios en un buen estado de ubicación.

Fuente: Blog de desarrolladores de Android: servicios de Google Play 7.0 – ¡Ubica a todos!

SDK ¡Próximamente!
Vamos a implementar los servicios de Google Play 7.0 en los próximos días. Espere una actualización de esta entrada de blog, documentación publicada y la disponibilidad del SDK una vez que se complete el despliegue.

actualizará el loc programático después de la implementación

En base a las notas de @ user2450263 anteriores, aquí hay algunos fragmentos,

 /** * Prompt user to enable GPS and Location Services * @param mGoogleApiClient * @param activity */ public static void locationChecker(GoogleApiClient mGoogleApiClient, final Activity activity) { LocationRequest locationRequest = LocationRequest.create(); locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); locationRequest.setInterval(30 * 1000); locationRequest.setFastestInterval(5 * 1000); LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() .addLocationRequest(locationRequest); builder.setAlwaysShow(true); PendingResult result = LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build()); result.setResultCallback(new ResultCallback() { @Override public void onResult(LocationSettingsResult result) { final Status status = result.getStatus(); final LocationSettingsStates state = result.getLocationSettingsStates(); switch (status.getStatusCode()) { case LocationSettingsStatusCodes.SUCCESS: // All location settings are satisfied. The client can initialize location // requests here. break; case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: // Location settings are not satisfied. But could be fixed by showing the user // a dialog. try { // Show the dialog by calling startResolutionForResult(), // and check the result in onActivityResult(). status.startResolutionForResult( activity, 1000); } catch (IntentSender.SendIntentException e) { // Ignore the error. } break; case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: // Location settings are not satisfied. However, we have no way to fix the // settings so we won't show the dialog. break; } } }); } 

Y úsalo como,

 mGoogleApiClient = new GoogleApiClient .Builder(this) .enableAutoManage(this, 34992, this) .addApi(LocationServices.API) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build(); locationChecker(mGoogleApiClient, MyActivity.this); 

Básicamente, su usuario recibirá un mensaje como este, donde puede habilitar la ubicación en el modo de alta precisión sin tener que entrar en la configuración Encienda el GPS

Tengo solución, probé en Android 6.0.1 Marshmallow, en el evento de botón OnClick call the void:

 private void openGPSSettings() { //Get GPS now state (open or closed) boolean gpsEnabled = Settings.Secure.isLocationProviderEnabled(getContentResolver(), LocationManager.GPS_PROVIDER); if (gpsEnabled) { Settings.Secure.putInt(getContentResolver(), Settings.Secure.LOCATION_MODE, 0); } else { Settings.Secure.putInt(getContentResolver(), Settings.Secure.LOCATION_MODE, 3); } } 

Android necesita habilitar la depuración del USB o ser rooteado. Ejecute el siguiente comando en adb shell (desde un shell raíz en el dispositivo o desde una computadora conectada por USB si el dispositivo no está rooteado):

 pm grant com.example.application.test android.permission.WRITE_SECURE_SETTINGS 

Agregue estos permisos en el manifiesto de la aplicación: