Xamarin Forms Android: sin conectividad al despertar cuando los permisos se establecen para preguntar cada vez. ¿Es esto un problema de Xamarin?
Descripción
Xamarin Forms Android: después de que la aplicación se ponga en reposo (después de 2 minutos), al intentar reanudarla, la aplicación pierde la capacidad de conectarse a internet:
Connectivity.NetworkAccess == NetworkAccess.None
Esto ocurre solo si el usuario ha seleccionado los permisos de ubicación como “Preguntar cada vez”. Si los permisos de ubicación se conceden por completo, la aplicación funciona correctamente.
davy.ai
Problema con la conectividad a internet de la aplicación Xamarin Forms en Android después de entrar en modo de espera
Descripción del problema
Como experto en TI especializado en Android, Forms, Xamarin, permisos y conectividad, se ha observado que después de que la aplicación Xamarin Forms Android entra en modo de espera durante 2 minutos, pierde su capacidad de conectarse a Internet y
Connectivity.NetworkAccess == NetworkAccess.None
. Este fenómeno solo se encuentra cuando el usuario ha establecido los permisos de ubicación enPedir cada vez
. Si se conceden completamente los permisos de ubicación, la aplicación funciona como se espera sin pérdida de conectividad a Internet.Causa raíz
La causa raíz de este problema es que cada vez que la aplicación Android entra en modo de espera, el sistema revoca todos los permisos para conservar la batería. Al reanudar la aplicación, el sistema solicita los permisos necesarios para que las aplicaciones realicen diversas tareas, incluido el acceso a Internet. Sin embargo, con la opción
Pedir cada vez
en los permisos de ubicación, la aplicación muestra el diálogo de permisos por sí sola, lo que hace que el sistema piense que el usuario ya había concedido los permisos. Como resultado, el sistema no vuelve a solicitar el permiso después de que se reanude la aplicación, y la aplicación pierde la conectividad a Internet.Solución
Para solucionar este problema y asegurarse de que la aplicación mantenga la conectividad a Internet al reanudarse después de entrar en modo de espera, se deben seguir los siguientes pasos:
OnRequestPermissionsResult
de la clase MainActivity.OnRequestPermissionsResult
para no llamar al métodoConnectivity.NetworkAccess
en el caso del permiso de ubicación.12345
.Siguiendo estos pasos, la aplicación Android puede mantener su conectividad a Internet después de reanudarse después de entrar en modo de espera, independientemente de la configuración de permisos.