es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Xamarin Geolocation simplemente se bloquea en algunos teléfonos.

Tengo una clase en la que tengo un temporizador y en intervalos de 15 segundos intento obtener la ubicación geográfica.

private System.Timers.Timer _getLocationTimer { get; set; }
_getLocationTimer = new System.Timers.Timer { Interval = 15000 };

_getLocationTimer.Elapsed -= GetLocation_Handler;
_getLocationTimer.Elapsed += GetLocation_Handler;
_getLocationTimer.Start();

async void GetLocation_Handler(object sender, ElapsedEventArgs e)
{
    Position position = null;
    try
    {
        var locator = CrossGeolocator.Current;
        locator.DesiredAccuracy = 100;

        position = await locator.GetLastKnownLocationAsync();

        if (position != null)
        {
            _position = new Position(position.Latitude, position.Longitude);
            // obtuvo una posición en caché, así que vamos a usarla.
            return;
        }

        if (!locator.IsGeolocationAvailable || !locator.IsGeolocationEnabled)
        {
            // no disponible o no habilitado
            return;
        }

        position = await locator.GetPositionAsync(TimeSpan.FromSeconds(10));
    }
    catch (Exception ex)
    {
        throw ex;
        return;
    }
    _position = new Position(position.Latitude, position.Longitude);
    if (position == null)
        return;
}

Mi problema está con el método GetPositionAsync porque a veces y solo en algunos teléfonos no devuelve ningún valor (simplemente se queda colgado en el método). Estoy utilizando la biblioteca Xam.Plugin.Geolocator de NuGet. ¿Alguien puede decirme qué puedo hacer para que GetPositionAsync funcione siempre?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no puedo acceder a las configuraciones de hardware específicas para depurar el problema, pero según el código proporcionado, aquí hay algunas sugerencias a tener en cuenta:

    1. Verificar si la aplicación tiene permiso para acceder a la ubicación del dispositivo. Si no lo tiene, el método podría detenerse hasta que se otorgue el permiso.
    2. Intentar aumentar el valor de tiempo de espera que se pasa como argumento a GetPositionAsync de 10 segundos a un valor más alto (por ejemplo, 30 segundos) y ver si marca alguna diferencia.

    3. Intentar usar la última versión de la biblioteca Xam.Plugin.Geolocator, ya que podría contener correcciones de errores para este problema específico.

    4. Implementar un mecanismo de tiempo de espera utilizando un objeto CancellationTokenSource y pasarlo como argumento al método GetPositionAsync. Si el método tarda demasiado en devolver un resultado, se puede cancelar la operación y manejar adecuadamente la condición de tiempo de espera.

    ¡Espero que esto ayude!

Comments are closed.