Activación del modo de ubicación Alta exactitud o ahorro de la batería, programáticamente, sin necesidad de que el usuario visite Configuración

Por qué pido esto: (también la razón de probarlo en una aplicación)

Sucede cuando usamos Google Maps en Lollipop . Incluso si la ubicación está desactivada, se activa, 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 se inicia la acción en mi aplicación; El usuario necesita hacer una elección, pero el usuario no es redirigido a Configuración, utilizando:

startActivity(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE));

Que se puede encontrar en BluetoothAdapter , ahora sabemos que no hay LocationAdapter, así que miré alrededor de gms-> LocationServices , básicamente casi todo bajo las referencias de API de ubicación , android.location.LocationManager , pero no parece nada como ACTION_REQUEST_ENABLE está disponible hasta ahora.

Espero que haya algún otro método para el mismo, y más personas lo han probado.

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

ACTUALIZACIÓN 2 :

GoogleSamples; LocationSettings – para la referencia de código.

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

Utiliza la configuraciónApi para asegurarse de 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) publicado …

Ajustes de ubicación – Si bien el FusedLocationProviderApi combina varios sensores para proporcionarle la ubicación óptima, la precisión de la ubicación que recibe su aplicación depende en gran medida de la configuración activada en el dispositivo (GPS, wifi, modo avión y otros). Utilizando la nueva clase SettingsApi, puede abrir un cuadro de diálogo Configuración de ubicación que muestra un control de un solo toque para que los usuarios puedan cambiar su configuración sin abandonar su aplicación.

Uso de la interfaz pública SettingsApi

  • Determine si los ajustes relevantes del sistema están habilitados en el dispositivo para realizar la solicitud de ubicación deseada.
  • Opcionalmente, invoque un diálogo que permita al usuario habilitar los ajustes de ubicación necesarios con un solo toque.


Saliendo de la parte anterior para referencia:
Actualizar / Responder
Para todos los que busquen esta respuesta, Google Play Services 7.0
Agrega APIs para detectar lugares y conectarse a dispositivos cercanos, mejora en anuncios para móviles, datos de aptitud, configuración de ubicación y más

En Google Play Services 7.0, estamos introduciendo un mecanismo estándar para comprobar que la configuración de ubicación necesaria está habilitada para que un determinado LocationRequest tenga éxito. Si hay mejoras posibles, puede mostrar un control de un toque para que el usuario cambie su configuración sin salir de su aplicación.

Exactamente esto

Esta API ofrece una gran oportunidad para mejorar la experiencia del usuario, sobre todo 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. Número de usuarios en un buen estado de ubicación.

Fuente: blog de desarrolladores de Android: Google Play Services 7.0 – Lugares de todos!

SDK pronto!
Estaremos lanzando Google Play Services 7.0 durante los próximos días. Espere una actualización de esta publicación del blog, la documentación publicada y la disponibilidad del SDK una vez que se complete el despliegue.

Actualizará la loc programática después de la implementación

Basado en las notas @ user2450263 arriba, he aquí 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<LocationSettingsResult> result = LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build()); result.setResultCallback(new ResultCallback<LocationSettingsResult>() { @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 utilizarlo 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 pueden activar la ubicación en el modo de alta precisión sin entrar en la configuración Activar el GPS

Tengo solución, probado en Android 6.0.1 Marshmallow, en el evento de botón OnClick llamar el vacío:

 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 USB o estar enraizada. Ejecute el comando siguiente en adb shell (desde un shell raíz en el dispositivo o desde una computadora conectada por USB si el dispositivo no está enraizado):

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

Agregue estos permisos en el manifiesto de aplicación:

 <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /> 
  • GoogleApiClient tiene un Plus.API opcional y no está conectado a Plus con el nuevo signo de Google introducido en Play Services 8.3
  • Google AppInvite: el correo electrónico no se envía mientras SMS se envía
  • Utilizar el complemento Android DataBinding en paralelo con Google Plugin de servicios
  • Google en la compra de aplicaciones para obtener la lista de productos
  • ¿Cómo abrir el mensaje Activar Bluetooth desde Google Play Services?
  • Error 12501 de autenticación con inicio de sesión de Google
  • Cómo diseñar la pantalla de invitación a aplicaciones de Google
  • Servicios de Google Play en Genymotion en Lollipop (Android 5.0)
  • API de conexiones cercanas de Google: mide la intensidad de la señal
  • Error de dependencia granular de servicio de Google Play
  • Comprobación de los servicios de Google Play con firebase
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.