Quiero conseguir mi posición actual cada marco con xamarin. formas
Tengo mi posición una vez cuando llamo a la función pero quiero conseguir mi posición cada marco en la aplicación. Cuando me muevo con el teléfono, la posición cambia. He intentado hacerlo mientras (verdad) pero no funcionó. cuando lo llamo en la función principal. se ejecutará una vez. y esta es mi función.
public async Task GetCurrentLocation()
{
var p = new Location();
try
{
var request = new GeolocationRequest(GeolocationAccuracy.Medium, TimeSpan.FromSeconds(10));
cts = new CancellationTokenSource();
var location = await Geolocation.GetLocationAsync(request, cts.Token);
if (location != null)
{
Console.WriteLine($"Latitude: {location.Latitude}, Longitude: {location.Longitude}, Altitude: {location.Altitude}");
map.MoveToRegion(MapSpan.FromCenterAndRadius(new Position(location.Latitude, location.Longitude), Distance.FromMeters(100)));
}
return location;
}
catch (FeatureNotSupportedException fnsEx)
{
await DisplayAlert("Faild", fnsEx.Message, "OK");
}
catch (PermissionException pEx)
{
await DisplayAlert("Faild", pEx.Message, "OK");
}
catch (Exception ex)
{
await DisplayAlert("Faild", ex.Message, "OK");
}
return p;
}
Pregunta hecha hace 3 años, 4 meses, 26 días - Por javajedi
3 Respuestas:
-
utilizar el GeoLocator plugin
async Task StartListening() { if(CrossGeolocator.Current.IsListening) return; await CrossGeolocator.Current.StartListeningAsync(TimeSpan.FromSeconds(5), 10, true); CrossGeolocator.Current.PositionChanged += PositionChanged; CrossGeolocator.Current.PositionError += PositionError; } private void PositionChanged(object sender, PositionEventArgs e) { //If updating the UI, ensure you invoke on main thread var position = e.Position; var output = "Full: Lat: " + position.Latitude + " Long: " + position.Longitude; output += "\n" + $"Time: {position.Timestamp}"; output += "\n" + $"Heading: {position.Heading}"; output += "\n" + $"Speed: {position.Speed}"; output += "\n" + $"Accuracy: {position.Accuracy}"; output += "\n" + $"Altitude: {position.Altitude}"; output += "\n" + $"Altitude Accuracy: {position.AltitudeAccuracy}"; Debug.WriteLine(output); } private void PositionError(object sender, PositionErrorEventArgs e) { Debug.WriteLine(e.Error); //Handle event here for errors } async Task StopListening() { if(!CrossGeolocator.Current.IsListening) return; await CrossGeolocator.Current.StopListening); CrossGeolocator.Current.PositionChanged -= PositionChanged; CrossGeolocator.Current.PositionError -= PositionError; }
Respondida el Dec 20, 2020 a las 16:42 - por pythonpirate
Votos positivos: 0 | Votos negativos: 0 -
Para obtener la ubicación actual en tiempo real en Xamarin.Forms, puedes utilizar la clase
Geolocator
que proporciona acceso a servicios de ubicación en dispositivos móviles. Aquí te dejo un ejemplo de cómo puedes modificar tu código para poder obtener la ubicación en cada fotograma (frame) de la aplicación:- Primero, asegúrate de agregar los permisos de ubicación en el archivo `AndroidManifest.xml` y en `Info.plist` para Android y iOS respectivamente.
- Utiliza la clase `Geolocator` para suscribirte a cambios en la ubicación. Aquí te dejo un ejemplo de cómo modificar tu método `GetCurrentLocation`:
c
public async Task
{ var locator = CrossGeolocator.Current; locator.DesiredAccuracy = 50; locator.PositionChanged += async (sender, e) => { var location = e.Position; Console.WriteLine($"Latitude: {location.Latitude}, Longitude: {location.Longitude}, Altitude: {location.Altitude}"); // Aquí puedes actualizar el mapa en tiempo real si es necesario // map.MoveToRegion(MapSpan.FromCenterAndRadius(new Position(location.Latitude, location.Longitude), Distance.FromMeters(100))); }; if (!locator.IsListening) { await locator.StartListeningAsync(TimeSpan.FromSeconds(10), 5); // Actualiza la ubicación cada 10 segundos o 5 metros } var currentLocation = await locator.GetLastKnownLocationAsync(); return currentLocation; }GetCurrentLocation() - Llama a la función `GetCurrentLocation` en tu código para empezar a recibir actualizaciones en tiempo real de la ubicación.
Es importante tener en cuenta que este código podría variar dependiendo de la versión de Xamarin.Forms y las configuraciones específicas de la plataforma que estés utilizando. No olvides gestionar adecuadamente los permisos de ubicación en cada plataforma.
Espero que esta información te sea de ayuda para obtener la ubicación actual en cada frame de la aplicación en Xamarin.Forms.
Respondida el Dec 21, 2020 a las 16:45 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para obtener tu posición actual cada fotograma en Xamarin.Forms, puedes utilizar el evento
LocationChanged
de la claseGeolocation
. Este evento se activa cada vez que cambia la ubicación del dispositivo.A continuación se muestra cómo puedes utilizar el evento
LocationChanged
para obtener tu posición actual cada fotograma:csharp Geolocation.LocationChanged += Geolocation_LocationChanged; private void Geolocation_LocationChanged(object sender, LocationChangedEventArgs e) { var location = e.Location; // Aquí puedes utilizar la ubicación actual Console.WriteLine($"Latitude: {location.Latitude}, Longitude: {location.Longitude}"); }
Ten en cuenta que debes asegurarte de eliminar el controlador de eventos
LocationChanged
cuando ya no lo necesites para evitar fugas de memoria. Puedes hacer esto en el métodoOnDestroy()
de tu actividad o página.Además, asegúrate de solicitar el permiso
ACCESS_FINE_LOCATION
en el manifiesto de Android para que tu aplicación pueda acceder a la ubicación del dispositivo.Respondida el Dec 21, 2020 a las 16:55 - por Gemini
Votos positivos: 0 | Votos negativos: 0