Muy buenas, soy Luis y esta vez les traigo este tutorial.
Estaba trabajando en un proyecto para una organización como autónomo en el que tenía que rastrear la ubicación del trabajador, usé Flutter SDK.
Usé un complemento de aleteo «background_location«. Este complemento rastreaba la ubicación mientras la aplicación permanece en primer plano, pero tan pronto como pasa a segundo plano deja de rastrear, seguí todos los pasos enumerados en la documentación de este complemento.
Pensé que era solo un error de complemento, así que probé otros complementos como «background_locator«. Lo que encontré al corregir este problema se enumera a continuación.
¿Cuál fue el problema?
El problema era el permiso para capturar la ubicación en segundo plano, que carecía del complemento background_location
.
Para proteger la privacidad de sus usuarios, Android no permite el acceso a datos privados como contactos, ubicación, etc. sin el consentimiento del usuario.
Para acceder a los datos, se debe dar un mensaje al usuario preguntándole si desea que la aplicación acceda a sus datos o no, esto se conoce como Permisos peligrosos.
Estos permisos deben declararse en el AndroidManifest.xml
(aplicación / src / main).
Lo que encontré al corregir este problema fue todo lo que necesita permiso debe declararse en el archivo AndroidManifest.xml
.
Lo que faltaba era ACCESS_BACKGROUNG_LOCATION
declaración en el permiso del archivo de manifiesto que no permitía a la aplicación acceder a la ubicación mientras permanecía en segundo plano.
Permiso de ubicación
Android tiene 2 niveles de permiso de ubicación:
En la mayoría de los casos, mientras usamos la ubicación en Flutter, generalmente tomamos el permiso de ubicación que nos permite acceder a la ubicación solo cuando permanece en primer plano.
background_locator (otro complemento que utilicé) mencionó este permiso en segundo plano, pero es complicado de usar y tampoco proporcionó ninguna opción de permiso incluida en el complemento. Podemos usar MethodInvoke o complementos para solicitar permiso del usuario para superar este problema.
Pero hay un problema al acceder al permiso de ubicación, hasta Android 9 (API nivel 28) se le pide al usuario que «Permitir» o «Denegar» el acceso a la ubicación que también incluye la ubicación en segundo plano (si se declara en el archivo de manifiesto), en Android 10 (API nivel 29) hay dos opciones en la solicitud de permiso, es decir, «permitir todo el tiempo» o «mientras la aplicación está en uso».
La opción «Permitir todo el tiempo» permite la ubicación en segundo plano (si se declara en el archivo de manifiesto) pero en Android 11 (API nivel 30), Android ha cambiado las opciones a «mientras está en uso» o «esta vez». Para permitir el acceso a la ubicación de fondo, el usuario debe ir a la configuración y seleccionar la opción «todo el tiempo». Puede consultar el documentación de android.
Solución
Una solución común es solicitar directamente acceder a la ubicación «todo el tiempo» en la aplicación, en lugar de pedir solo el acceso a la ubicación. Al hacerlo, uno puede manejar diferentes requisitos de nivel de API de una sola vez.
Puede usar el canal Method
o el complemento flutter
. He usado un complemento de flutter llamado allow_handler . Y pidió directamente el permiso locationAlways
.
var permission = await Permission.locationAlways.isGranted; if(!permission){ var t = await Permission.locationAlways.request(); }
Puede declarar este código en el nivel más alto de su árbol de widgets para asegurarse de que la aplicación también tenga permiso para acceder a la ubicación en segundo plano.
Abra su archivo de manifiesto y revise todos los permisos disponibles en el menú desplegable, y declare todos.
Solo debido a un problema de permiso, puede ver en lo anterior cómo Android restringió el uso de datos de ubicación en segundo plano.
En segundo lugar, actualícese con los últimos cambios que está haciendo Android con sus próximas versiones y asegúrese de implementarlos en el código de su aplicación.
Espero que te haya sido de utilidad. Gracias por leer.
Añadir comentario