android - gms - google play services versions
Habilitación del modo de ubicación de alta precisión o ahorro de batería, mediante programación, sin necesidad de que el usuario visite Configuración (3)
Por qué pregunto esto: (también la razón para 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 la acción se inicia en mi aplicación; el usuario debe hacer una elección, pero el usuario no es redirigido a Configuración, usando:
startActivity(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE));
que se puede encontrar en
BluetoothAdapter
, ahora sabemos que no hay LocationAdapter, así que busqué alrededor de
gms->LocationServices
, básicamente casi todo en
referencias de API de ubicación
,
android.location.LocationManager
, pero parece que
ACTION_REQUEST_ENABLE
está disponible.
Espero que haya otro método para lo mismo, y más personas lo hayan probado.
Tenga en cuenta:
context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
no funciona asi
Según 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<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 ú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 modo de alta precisión sin entrar en la configuración
Tengo una solución, probada en Android 6.0.1 Marshmallow, en el evento de botón
OnClick
llame al 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 debe tener habilitada la depuración de USB o estar 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:
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
ACTUALIZACIÓN 3 :
Solicite al usuario que cambie la configuración de ubicación como @patrickandroid, mencionado en los comentarios, el enlace de la segunda actualización está roto
GoogleSamples; Ubicación y opciones de Android: para referencia de código.
ACTUALIZACIÓN 2 :
GoogleSamples; - para referencia de código.
Este ejemplo se basa en el ejemplo de LocationUpdates incluido en este repositorio y permite al usuario actualizar la configuración de ubicación del dispositivo mediante un 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) lanzado ...
Configuración de ubicación : si bien FusedLocationProviderApi combina múltiples sensores para brindarle la ubicación óptima, la precisión de la ubicación que recibe su aplicación aún depende en gran medida de la configuración habilitada en el dispositivo (GPS, wifi, modo avión y otros). Con la nueva clase 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 sus configuraciones sin salir de la aplicación.
Uso de la interfaz pública SettingsApi
- Determine si las configuraciones relevantes del sistema están habilitadas en el dispositivo para llevar a cabo la solicitud de ubicación deseada.
- Opcionalmente, invoque un cuadro de diálogo que permita al usuario habilitar la configuración de ubicación necesaria con un solo toque.
Dejando la parte anterior como referencia:
Actualización / respuesta
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, configuración de ubicación y más
En los servicios de Google Play 7.0, estamos introduciendo un mecanismo estándar para verificar que la configuración de ubicación necesaria esté habilitada para que una LocationRequest tenga éxito. Si hay posibles mejoras, puede mostrar un control de un toque para que el usuario cambie su configuración sin salir de su aplicación.
Esta API ofrece una gran oportunidad para mejorar la experiencia del usuario, 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 el cantidad de usuarios en un buen estado de ubicación.
Fuente: Blog de desarrolladores de Android: Google Play services 7.0 - Places Everyone!
SDK Próximamente
Lanzaremos los servicios de Google Play 7.0 en los próximos días. Espere una actualización de esta publicación de blog, la documentación publicada y la disponibilidad del SDK una vez que se complete el despliegue.
actualizará la ubicación programática después de la implementación