Компоненты App Inventor – Sensors

Компоненты App Inventor - SensorsЧасы, навигация, игры – где только не используются данные с сенсоров, которыми напичканы современные android-устройства. Как минимум, часы необходимо использовать в значительном числе приложений, хотя бы для задания временных интервалов. И вот, в App Inventor существует специальный класс компонентов, которые позволяют получать данные с различных сенсоров и датчиков – Sensors. Они пригодятся и в анимации и в работе с медиа.


Наиболее используемый этого блока компонентов:
Clock
Или часы. Это невидимый компонент, который обеспечивает отсчет времени, используя часы android-гаджета. Он позволяет отслеживать текущее время, считать временные промежутки и т.д. Единицей времени для Clock служит миллисекунда.
Этот компонент App Inventor имеет большое количество команд , но их количество объясняется, главным образом, большим же количеством единиц времени – от секунды до года. И команды, по сути, дублируются для каждой единицы
Компонент ClockСвойства
TimerAlwaysFires
При активном данном свойстве отсчет времени ведется даже при выключенном приложении
TimerEnabled
Включен/выключен
TimerInterval
Отсчет интервала между событиями
События
Timer
Время на таймере (или интервал) достигло определенной величины
Команды
InstantInTime AddDays(InstantInTime instant, number days)
InstantInTime AddHours(InstantInTime instant, number hours)
InstantInTime AddMinutes(InstantInTime instant, number minutes)
InstantInTime AddMonths(InstantInTime instant, number months)
InstantInTime AddSeconds(InstantInTime instant, number seconds)
InstantInTime AddWeeks(InstantInTime instant, number weeks)
InstantInTime AddYears(InstantInTime instant, number years)
Весь этот набор команд служит для прибавления некоторого количества единиц времени (секунд, инут и т.д) к соответствующей текущей единице. Например, вот такой конструкцией можно прибавить количество часов из текстового блока Label1 к текущему времени и вывести результат в текстовый блок Label3

addhours

DayOfMonth(InstantInTime instant)
Возвращает текущий день месяца, например, в текстовый блок
 Duration(start, end)
Количество миллисекунд между стартом и финишем. Старт, например, задается нажатием одной кнопки и фиксируется в одном текстовом блоке, а финиш, соответственно, другой кнопкой.
FormatDate(InstantInTime instant, text pattern)
Возвращает в текстовый блок дату в указанном формате. Указание формата задается в pattern (образце)
FormatDateTime(InstantInTime instant, text pattern)
Возвращает в текстовый блок дату и время в указанном формате
FormatTime(InstantInTime instant)
Возвращает в текстовый блок текущее время в формате чч:мм:сс

formattime
GetMillis(InstantInTime instant)
Количество миллисекунд, прошедших с 1970 года.
Hour(InstantInTime instant)
Текущий час
Minute(InstantInTime instant)
Текущая минута часа
Month(InstantInTime instant)
Номер текущего месяца
MonthName(InstantInTime instant)
Возвращает название месяца
InstantInTime Now()
Текущее время с часов устройства
Second(InstantInTime instant)
Текущая секунда
SystemTime()
Системное время телефона в миллисекундах.
Weekday
Возвращает номер дня недели
WeekdayName
Возвращает название дня недели
Year
Год

AccelerometerSensor
Сенсор, который определяет ускорение устройства. Проще говоря, это компонент определяет движется ли телефон (точнее, ускоряется ли) и в каком направлении. Этот компонент особо полезен для всяких игр, где предполагается управлять действием приложения, изменяя положение телефона в пространстве, например, тряся его. И если гироскопом (сенсор, определяющий положения устройства в пространстве) обладают далеко не все гаджеты, то акселерометр есть почти у всех.
При этом, в контексте данного компонента принимается:
— ускорение относительно X – это качание устройства вправо-влево, когда устройство находится на горизонтальной плоскости.
— ускорение относительно Y – это качание устройства вперед-назад, когда устройство находится на горизонтальной плоскости.
— ускорение относительно Z – это качание вверх-вниз. Здесь измерение ведется относительно ускорения свободного падения.
Свойства
Available
Включено/доступно
MinimumInterval
Минимальный отслеживаемый временной интервал между перемещениями устройства.
Sensitivity
Чувствительность сенсора, измеряемая по трехбалльной шкале, от 1 до 3.
XAccel
YAccel
ZAccel
Все три строки выше – это величины X, Y, Z
События
AccelerationChanged(number xAccel, number yAccel, number zAccel)
Указывает ускорение относительно X, Y, Z
Shaking()
Начало перемещения устройства, тряски или качания.
Команды для этого компонента App Inventor отсутствуют
BarcodeScanner
Сканер штрих-кода.
Свойства
Result
Результат предыдущего сканирования.
UseExternalScanner
Если это свойство включено, то App Inventor искать внешнюю программы для сканирования штрих-кода из имеющихся на android-устройстве
События
AfterScan
Вывод результата сканирования
Команды
DoScan()
Начать сканирование. Когда сканирование завершено, возникает событие AfterScan
LocationSensor
Невидимый компонент,  получающий данные от датчика GPS, определяющий широту и долготу, а так же высоту над уровнем моря. Чтобы он работал, разумеется, должен быть включен GPS-датчик. Или, как минимум, должна быть подключена A-GPS (определение примерного местоположения по отношению к базовым станциям связи). Однако в последнем случае точность колеблется от десятков метров до сотен, а то и километров, что зависит от плотности расположения БС.
Свойства
Accuracy
Точность определения координат
Altitude
Высота
AvailableProviders
Доступные провайдеры связи
CurrentAddress
Текущий адрес. По моему опыту, определяется адрес провайдера связи.
DistanceInterval
Это свойство определяет минимальное расстояние в метрах, при котором будет обновляться данные о местоположении. Но, как вы понимаете, точность GPS колеблется от метров до десятков метров в зависимости от условий, так что никаких гарантий… Никаких…
HasAccuracy
Доступность задания точности
HasAltitude
Доступность получения высоты
HasLongitudeLatitude
Доступность получения широты и долготы
Latitude
Широта
Longitude
Долгота
ProviderLocked
Блокировка провайдера связи
ProviderName
Название провайдера связи
TimeInterval
Минимальный временной интервал в миллисекундах, через который датчик будет пытаться обновить данные о координатах. Однако, опять же, ключевое здесь «будет пытаться».
События
LocationChanged(широта, долгота, высота)
Получение от датчика GPS новых координат.
StatusChanged(название провайдера связи, его статус)
Изменение статуса провайдера связи: найден, потерян и т.д.
Команды
LatitudeFromAddress(text locationName)
Определить широту текущего адреса
LongitudeFromAddress(text locationName)
Определить долготу текущего адреса
NearField
Этот компонент App Inventor обеспечивает связь с NFC-модулем. NFC, вкратце, это технология ближней связи (совсем ближней, до 10см) и используемая для идентификации устройства, например, в платежных системах. За подробностями о NFC отошлю к Википедии (https://ru.wikipedia.org/wiki/Near_Field_Communication). Замечу, лишь, что далеко на всякие устройства имеют этот самый модуль.
Подробно описывать здесь смысла не вижу, так как если вы полезли в NFC, то с этим компонентом разберетесь влегкую.  Во, как я вывернулся!

OrientationSensor
Этот компонент обеспечивает получение данных от гироскопа и компаса гаджета. Гироскоп – это такая штуковина, которая определяет положение в пространстве. Если акселерометр может измерять только ускорение, то гироскоп – работает и с неподвижной тушкой. Правда, наличествуют последние только в тушках подороже, как правило. Компас есть также далеко не у всех устройств.
Компонент позволяет получить три показателя в градусах:
•    Roll : угол поворота вокруг «вертикальной» оси. За вертикальную ось считаем ось параллельную правой и левой сторонам гаджета. От 0 до 90 градусов – вращение влево, от 0 до -90 градусов – вправо.
•    Pitch : то же самое, только относительно горизонтальной оси.
•    Azimuth : а это уже направление по сторонам света. 0 – север, 90 – восток, 180 юг, 270 – запад.
Свойства
Available
Указывает наличие датчиков на устройстве.
Azimuth, Pitch, Roll
См. выше
Magnitude
Число между 0 и 1, которое пропорционально углу наклона устройства и позволяет получить относительную силу, производную от силы тяжести, с которой, например, спрайт столкнется с краем холста.
Angle
Возвращает угол вектора направление действия силы, проще говоря угол под которым покатится шарик на экране
События
OrientationChanged(azimuth, pitch, roll)
Возвращает вновь полученные значения соответствующих данных.
Собственных команд у компонента нет
ProximitySensor
Компонент, получающий данные от датчика приближения. Этот датчик присутствует у большинства устройств с тачскрином и позволяет определить приближение экрана к какому-либо объекту, обычно к «уху головы». Если б его не было, вы бы нажимали кнопки на тачскрине ухом и щекой. Некоторые датчики определяют просто близость объекта, а некоторые еще его и измеряют
Свойства
Available
Определяет наличие датчика в устройстве
KeepRunningWhenOnPause
Если установлено «true», то компонент будет активен и при свернутом приложении
Distance
Расстояние до объекта
MaximumRange
Отчет о максимально возможном диапазоне измерения.
События
ProximityChanged(distance)
Приближение устройства к объекту на определенное расстояние
Собственных команд нет.
Вот, пожалуй, и все про компоненты Sensors App Inventor. Повторюсь, наиболее употребимым здесь является компонент Clock.