En contra del enfoque tradicional de pedirle al usuario que vaya a la página de configuración y habilite los servicios de ubicación y vuelva de nuevo, he notado una forma más sencilla de hacer lo mismo en algunas de las aplicaciones más recientes.
Refiriéndose a la captura de pantalla a continuación, aparece un cuadro de diálogo para que el usuario habilite los servicios de ubicación con solo un clic y funciona en esas aplicaciones.
¿Cómo puedo lograr lo mismo?
Respuestas:
Este cuadro de diálogo lo crea LocationSettingsRequest.Builder disponible en Google Play Services.
Necesita agregar una dependencia a su aplicación
build.gradle
:Entonces puedes usar este ejemplo mínimo:
Puede encontrar el ejemplo completo aquí .
fuente
You need to add a dependency to your app build.gradle: compile 'com.google.android.gms:play-services:8.1.0'
app
Siga los pasos que se mencionan a continuación
1) Cree un
LocationRequest
según su deseo2) Crea un
LocationSettingsRequest.Builder
3) Obtener
LocationSettingsResponse
Task
el uso siguiente códigoNota:
LocationServices.SettingsApi
está en desuso, así que use en suSettingsClient
lugar.4) Agregue un
OnCompleteListener
para obtener el resultado de la tarea. Cuando seTask
complete, el cliente puede verificar la configuración de ubicación mirando el código de estado delLocationSettingsResponse
objeto.CASO 1: La
LocationSettingsStatusCodes.RESOLUTION_REQUIRED
ubicación no está habilitada, pero podemos pedirle al usuario que habilite la ubicación solicitándole que active la ubicación con el cuadro de diálogo (llamandostartResolutionForResult
).CASO 2:
LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE
La configuración de ubicación no está satisfecha. Sin embargo, no tenemos forma de corregir la configuración, por lo que no mostraremos el cuadro de diálogo.5)
OnActivityResult
podemos obtener la acción del usuario en el cuadro de diálogo de configuración de ubicación.RESULT_OK
=> El usuario activó la ubicación.RESULT_CANCELLED
- El usuario rechazó la solicitud de configuración de ubicación.fuente
Funciona de forma similar a los mapas de Google
Agregar dependencia en el archivo build.gradle
esta o aquella
fuente
Declaración de variable
Abrir cuadro de diálogo usando el siguiente código
onActivityResult
fuente
rae.startResolutionForResult(activity, REQUEST_CHECK_SETTINGS)
llamarstartIntentSenderForResult(rae.getResolution().getIntentSender(), REQUEST_CHECK_SETTINGS, null, 0, 0, 0, null)
, de lo contrarioonActivityResult()
, no se llamará.startIntentSenderForResult
en el métodoopenGpsEnableSetting()
?openGpsEnableSetting()
simplemente se inicia un diálogo para habilitar la configuración del GPS. Una vez finalizado,onActivityResult()
se llama conrequestCode == REQUEST_ENABLE_GPS
.onActivityResult()
se llama desde Activity y me preguntaba si es posible devolver el resultado a un meFragment
gustastartIntentSenderForResult
.Gracias a Mattia Maestrini +1
Solución de Xamarin:
NOTA:
Esto no funcionará con Huawei u otros dispositivos que no tengan los servicios de Google instalados.
fuente
using android.Gms.Common.Apis; using Android.Gms.Location;
? Después de llamarLocationServices.SettingsApi.CheckLocationSettings
, ¿recibe una devolución de llamada dentroresult.SetResultCallback(
? Coloque un punto de interrupción en cada uno de ellos y verifique lo que está haciendo el códigoAndroid Marshmallow 6 admite permisos de tiempo de ejecución. Los permisos de tiempo de ejecución solo funcionan en Marshmallow y en versiones anteriores a Marshmallow todavía funcionan de la manera anterior.
Puede obtener más información al respecto en este video oficial para desarrolladores de Android:
https://www.youtube.com/watch?v=C8lUdPVSzDk
Y solicitando permiso: http://developer.android.com/training/permissions/requesting.html
fuente
Gracias Mattia Maestrini por la respuesta, me gustaría agregar eso usando
compile 'com.google.android.gms:play-services-location:8.1.0'
bastaría. Esto evita que su aplicación incluya bibliotecas innecesarias y ayuda a mantener un número bajo de métodos.
fuente
Solución de Kotlin
Añadir
build.gradle(Module:app)
después de eso crea esta función
fuente
Con la actualización reciente de Marshmallow, incluso cuando la configuración de Ubicación está activada, su aplicación requerirá pedir permiso explícitamente. La forma recomendada de hacer esto es mostrar la sección Permisos de su aplicación en la que el usuario puede alternar el permiso según sea necesario. El fragmento de código para hacer esto es el siguiente:
Y anule el
onRequestPermissionsResult
método de la siguiente manera:Otro enfoque es que también puede usar SettingsApi para consultar qué proveedores de ubicación están habilitados. Si ninguno está habilitado, puede abrir un cuadro de diálogo para cambiar la configuración desde la aplicación.
fuente
La forma más sencilla que encontré mientras investigaba es crear una clase Util para este proceso de solicitud de ubicación y luego llamarla para que encienda el GPS.
¡Por favor revisa este blog! Contó toda la historia.
fuente