ПредишенСледващото

Сензори и услуги

Целта на лекцията, за да научите как да работите с координати, акселерометър. картички и други, услуги и сензори.

Windows Phone 7 устройство трябва да има голям брой хардуерни характеристики - понякога по-нататък сензори - и да предоставят някои услуги, софтуер, може би с хардуерна поддръжка. Помислете за тези, които са най-интересни за разработчици:

акселерометър

Изходът на акселерометъра е удобно представени под формата на триизмерна вектор. Обикновено векторите са написани в удебелен шрифт, така вектор ускорение могат да бъдат означени както следва :. В XNA е типът на триизмерен вектор. в Silverlight там.

Като има предвид три координати точно определяне на точка в пространството, векторът представлява посоката и големината. Очевидно е, че точката и вектора взаимосвързано. вектор посока - лъч от точка до точка. Но вектора не се реже. и свързване. Тази тенденция на този сегмент.

За да се изчисли модул вектор използва триизмерна форма на питагорова теорема:

Знайте, Intuit, лекция, датчици и обслужване


Фиг. 8.1. триизмерна координатна система

Това е традиционен триизмерна координатна система. същият, използван за създаването на 3D-графика на XNA. Тя се нарича дясна координатна система. Поставете показалеца на дясната ръка по протежение на положителна посока, средния пръст - по протежение на положителна посока, а палецът ще насочи в положителна посока.

В свободно падане вектор ускорение единица теоретично трябва да клони към нула.

За да работите с акселерометъра се използва Microsoft.Devices.Sensors библиотека и пространство от имена Microsoft.Devices.Sensors. В WMAppManifest.xml файл, трябва да посочите:

Това е по подразбиране.

Приложението създава инстанция на акселерометър клас (акселерометър), манипулатор на събитие е настроен ReadingChanging (промяна четения) и се нарича методът Start.

Помислете проект SilverlightAccelerometer. проект. който предвижда само за показване на текущите четения. Центрирано TextBlock описано във файла XAML.

Silverlight проект: SilverlightAccelerometer файл. Главна страница. XAML (фрагмент)

За да добавите Microsoft.Devices.Sensors библиотека в проекта, трябва:

  1. щракнете с десния бутон върху SilverlightAccelerometer / Референции възел в Solution Explorer и изберете Add Reference. На диалоговия .NET прозорец изберете библиотеката, за да изберете Microsoft.Devices.Sensors и натиснете ОК;

Знайте, Intuit, лекция, датчици и обслужване


Фиг. 8.2. Добавянето Microsoft.Devices.Sensors библиотека

  • добавяне на линия с Microsoft.Devices.Sensors; в MainPage.xaml.cs
  • Това приложение ще предостави на дисплея на вектор акселерометър през цялото време на неговото изпълнение, така че създаването на акселерометър клас и извикате метода старт се извършва в конструктора:

    Silverlight проект: SilverlightAccelerometer файл. Главна страница. XAML .cs ​​(фрагмент)

    Документацията предупреждава, че началото на разговора може да доведе до образуването на изключение, така че приложението се защитава себе си от това. Акселерометър клас също така поддържа методи Stop (Стоп) и да се разпорежда (Изтриване), но в програмата не се използват. За да се предостави информация за наличността на акселерометъра и държавата е предвидено за държавната собственост.

    ReadingChanged събитие осигурява класове аргументи AccelerometerReadingEventArgs събития. Този обект има свойства и двойно и вида на имота TimeStamp DateTimeOffset (DateTime отместване). Приложение SilverlightAccelerometer събитие манипулатор задача - да форматирате данните в низ и да го настроите като стойността на обекта Текст TextBlock.

    Уловката тук е, че на събитието манипулатор (в този случай, OnAccelerometerReadingChanged (При смяна акселерометър)) се нарича в друга нишка на изпълнение. Това означава, че трябва да се работи по специален начин.

    Малко теория. Създаване и достъп до всички обекти и потребителски интерфейс при прилагането на Silverlight работи в основната изпълнение, което често се нарича UI нишката или UI-конец. Тези обекти на потребителския интерфейс не са нишки безопасно; за тях не е предвидено за едновременен достъп от множество нишки. Затова Silverlight не позволи достъп до обекта на потребителския интерфейс от поток от не-UI поток.

    Това означава, че OnAccelerometerReadingChanged метод не може да се прилага директно към TextBlock елемент, за да зададете нова стойност на неговия текст собственост.

    За щастие System.Windows.Threading пространство от имена клас описано експедитор (диспечерски), която осигурява решение на този проблем. След задачи диспетчерски клас могат да бъдат насочени от потока не е UI поток на опашката. който по-късно ще бъде обработена UI-резба. Всичко това звучи доста сложно, но от гледна точка на разработчика доста лесно на, защото тези задачи да бъдат под формата на прост метод разговори.

    Експедитор например вече е налице. Клас DependencyObject (зависимост) описва типа на имота експедитор експедитор. и много наследени от DependencyObject клас Silverlight. С всички случаи на тези класове, можете да работите от притока на чуждестранни UI потоци, тъй като всички те имат свойства експедитор. От всеки клас, получен от DependencyObject създадена UI поток може да бъде всеки обект диспечерски. Всички те са едни и същи.

    Експедитор клас дефинира метод CheckAccess (Проверете достъп), която връща истина. ако текущата нишка има достъп до дадена точка на потребителския интерфейс. (Метод CheckAccess също е дублирана от DependencyObject.) За случаите, в които достъпът до обекта на текущата нишка не е възможно, на диспечера предлага две версии на метода Invoke (Call), в която сте изпращане на работни места за UI поток.

    Проектът се реализира SilverlightAccelerometer версия на кода, задълбочена от гледна точка на синтаксиса.

    В разгънатата версия, трябва да делегира и методът съгласно този делегат. Делегат (и) метод не трябва да има връщане на стойност, но тя трябва да има такъв брой аргументи, които ще бъдат достатъчни, за да изпълни задачата. В този случай, базовата линия се придаващ стойността на имота Текст TextBlock обект.

    Проект: SilverlightAccelerometer файл. Главна страница. XAML .cs ​​(фрагмент)

    OnAccelerometerReadingChanged отговорен за свикване SetTextBlockText (Ask текстов блок от текст). Той за първи път използва CheckAccess. да се определи дали методът на SetTextBlockText обаждане директно. Ако това не е възможно, водачът призовава BeginInvoke Метод (Trigger Call). Първото му аргумент е метод делегат например SetTextBlockText. Следван от всички необходими SetTextBlockText аргументи:

    Проект: SilverlightAccelerometer файл. Главна страница. XAML .cs ​​(фрагмент)

    Това не е лош вариант, но е необходимо да скочи от поток, за да поток дава за прилагане на допълнителен метод и делегат.

    Знайте, Intuit, лекция, датчици и обслужване


    Фиг. 8.3. Резултатът от програмата

    Свързани статии

    Подкрепете проекта - споделете линка, благодаря!