330 likes | 515 Vues
Capacidades avanzadas. Jose Antonio Gallego Jefe de proyectos Eduardo Ortega MVP-Windows Phone. Windows Phone 7.5 Acelerómetro. Sensores. Windows Phone dispone de varios sensores Permiten determinar la orientación y movimiento del dispositivo Es posible acceder a cada sensor
E N D
Capacidadesavanzadas Jose Antonio Gallego Jefe de proyectos Eduardo Ortega MVP-Windows Phone
Sensores Windows Phone dispone de varios sensores Permiten determinar la orientación y movimiento del dispositivo Es posible acceder a cada sensor SensorBase<TSensorReading> clase base de APIs sensores APIs no permitidas bajo pantalla bloqueada ni agentes en segundo plano
Acelerómetro • Determina dirección de movimiento • Expresa la aceleración como vector tridimensional • Componente X • Componente Y • Componente Z • Detecta la dirección en que el usuario mueve el dispositivo
Acelerómetro • if (!Accelerometer.IsSupported) • { • // El dispositivo en el que se está ejecutando la App no dispone de • // acelerómetro, lo cual se notificará al usuario con un mensaje • MessageBox.Show("El dispositivo no dispone de acelerómetro"); • } • Leer datos del acelerómetro • Agregar referencias Microsoft.Devices.Sensors Microsoft.Xna.Framework(datos = vector3) • Comprobar si está soportado
Acelerómetro • if(accelerometer== null) • { • // Instanciar el Acelerómetro • accelerometer= new Accelerometer(); • accelerometer.TimeBetweenUpdates= TimeSpan.FromMilliseconds(20); • accelerometer.CurrentValueChanged+=new EventHandler<SensorReadingEventArgs • <AccelerometerReading>>(accelerometer_CurrentValueChanged); • accelerometer.Start(); • } • Leer datos del acelerómetro • Inicializar el acelerómetro
Acelerómetro • voidaccelerometer_CurrentValueChanged(objectsender, • SensorReadingEventArgs<AccelerometerReading> e) • { • // Llamar a la función de actualización del UI pasándole datos del acelerómetro • Dispatcher.BeginInvoke(() => UpdateUI(e.SensorReading)); • } • privatevoidUpdateUI(AccelerometerReadingaccelerometerReading) • { • Vector3 acceleration = accelerometerReading.Acceleration; • // Mostrar los valores numéricos • xTextBlock.Text= "X: " + acceleration.X.ToString("0.00"); • yTextBlock.Text = "Y: " + acceleration.Y.ToString("0.00"); • zTextBlock.Text = "Z: " + acceleration.Z.ToString("0.00"); • } • Leer datos del acelerómetro • Implementar manejador del evento CurrentValueChanged • Actualizar el interfaz de usuario con los nuevos datos
El giróscopo • Determina la velocidad rotacional del dispositivo en los ejes X, Y, Z. • Los valores obtenidos del sensor del giróscopo determinan la orientación del dispositivo en el espacio • No todos los dispositivos están equipados con giróscopo • Comprobar si existe el sensor antes de utilizarlo
Cómo utilizar el giróscopo if (gyroscope == null) { gyroscope = new Gyroscope(); gyroscope.TimeBetweenUpdates = TimeSpan.FromMilliseconds(20); gyroscope.CurrentValueChanged += new EventHandler<SensorReadingEventArgs<GyroscopeReading>>(gyroscope_CurrentValueChanged); gyroscope.Start(); } . . . if (gyroscope != null) { gyroscope.Stop(); }
Cómo utilizar el giróscopo • Información recuperada: • RotationRate • Timestamp Velocidad rotacional alrededor de cada eje del dispositivo (en radianes/seg) Momento exacto de la lectura de datos voidgyroscope_CurrentValueChanged(objectsender, SensorReadingEventArgs<GyroscopeReading> e) { //Procesar los datos leídos del sensor }
La brújula • Determina el ángulo de rotación del dispositivo respecto al Polo Norte magnético de la Tierra. • Se pueden medir también las fuerzas magnéticas alrededor del dispositivo • Es necesario calibrarla con frecuencia • No todos los dispositivos están equipados con brújula • Comprobar si existe el sensor antes de utilizarlo
Cómo utilizar la brújula if (compass == null) { compass = new Compass(); compass.TimeBetweenUpdates = TimeSpan.FromMilliseconds(1); compass.CurrentValueChanged += new EventHandler<SensorReadingEventArgs<CompassReading>>(compass_CurrentValueChanged); compass.Start(); } . . . if (compass != null) { compass.Stop(); }
Cómo utilizar la brújula • Información recuperada: • HeadingAccuracy • MagneticHeading • MagnetometerReading • Timestamp • TrueHeading Rumbo (en grados) en sentido horario respecto al Polo Norte Magnético Precisión (en grados) del rumbo Rumbo (en grados) en sentido horario desde el Norte geográfico Momento exacto de la lectura de datos Datos leídos del magnetómetro (en microteslas) voidcompass_CurrentValueChanged(objectsender, SensorReadingEventArgs<CompassReading> e) { //Procesar los datos leídos del sensor }
Servicio de localización • El servicio de localización en WP7 obtiene los datos de posicionamiento de: • GPS • WIFI • Radio GSM • El sistema busca el equilibrio entre consumo de batería y rendimiento, en función de las necesidades de la aplicación • Interfaz de código orientado a eventos administrados
Utilizar el servicio de localización • Agregar referencia:System.Device.dll • Directiva Using:usingSystem.Device.Location • Añadir objeto GeoCoordinateWatcherpublicpartialclassMainPage : PhoneApplicationPage { GeoCoordinateWatcherwatcher; }
Aplicación con localización opcional privatevoid btnIniciar_Click(object sender, RoutedEventArgs e) { if (watcher == null) { watcher = newGeoCoordinateWatcher(GeoPositionAccuracy.High); watcher.MovementThreshold = 20; watcher.StatusChanged += newEventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged); watcher.PositionChanged += newEventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged); } watcher.Start(); } void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e) { txtLatitud.Text = e.Position.Location.Latitude.ToString("0.000"); txtLongitud.Text = e.Position.Location.Longitude.ToString("0.000"); } privatevoid btnPararServicioLocalizacion_Click(object sender, RoutedEventArgs e) { watcher.Stop(); } void watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e) { switch (e.Status) { caseGeoPositionStatus.Disabled: if (watcher.Permission == GeoPositionPermission.Denied) txtEstado.Text = “Debe habilitar la localización” else txtEstado.Text = “Servicio no disponible."; break; caseGeoPositionStatus.Initializing: btnIniciar.IsEnabled = false; break; caseGeoPositionStatus.NoData: txtEstado.Text = “Sin señal"; btnPararServicioLocalizacion.IsEnabled = true; break; caseGeoPositionStatus.Ready: txtEstado.Text = “Localización preparada"; btnPararServicioLocalizacion.IsEnabled = true; break; } }
Control BingMaps • Crear una cuenta de desarrollador https://www.bingmapsportal.com/ • Creamos una nueva Key Nombre aplicación, URL, tipo de aplicación….. • Agregamos la referencia xmlns:map="clr-namespace:Microsoft.Phone.Controls.Maps;assembly=Microsoft.Phone.Controls.Maps“ • Insertamos el control <map:MapName="miMapa"CredentialsProvider="AwQh_41-o1y-v1GpwaI3IG7ryv7eAlbWjsZFxJbYJVr_7GzHg2Rze"></map:Map>
Control BingMaps • Cambiar el tipo de vista: miMapa.Mode = newRoadMode(); miMapa.Mode = newAerialMode(); • Cambiar el zoom: if (miMapa.ZoomLevel < 20) miMapa.ZoomLevel++; if (miMapa.ZoomLevel > 1) miMapa.ZoomLevel--; • Añadir Pushpin: Pushpin pin = newPushpin(); pin.Content = "Aquí"; pin.Background = newSolidColorBrush(Colors.Orange); pin.Location = coord; miMapa.SetView(coord, 14);//indicolascoordenadas y el zoom miMapa.Children.Add(pin);
Introducción a la realidad aumentada La realidad aumentada permite sobreponer información “virtual” en el mundo real
Introducción a la realidad aumentada Torre Eiffel • Elementos de realidad aumentada • Etiquetas de texto emplazadas en puntos del espacio y que se desplazan al mover el dispositivo • Edificios, tiendas, hoteles…
Introducción a la realidad aumentada • Una aplicación de realidad aumentada necesita utilizar • Sensores (Motion API) • Cámara • Datos
Sensores • Yaw • Pitch • Roll • Aceleración rotacional • Aceleración lineal • Obtienen la orientación y movimiento del dispositivo • Brújula: rumbo respecto al Polo Norte POIs a mostrar en la pantalla • GPS: posición en coordenadas geográficas Lugares cercanos al dispositivo • Motion API: Combina los valores obtenidos de Brújula + Giroscopio + Acelerómetro
GRACIASwww.micmovilidad.es Jose Antonio Gallego http://geeks.ms/blogs/jagallego @lmovilerowww.fiveflamesmobile.com Eduardo Ortega http://geeks.ms/blogs/eduardoortega www.mobilenug.com