СЕНСОРИ, КОМУНІКАЦІЯ БЛИЗЬКОГО ПОЛЯ, МОВА, ЖЕСТИ І ДОСТУПНІСТЬ в Android додатку

&nbsp

Завдяки нинішньому технічному прогресу як користувач, так і довкілля можуть взаємодіяти з пристроєм різноманітними способами Мова йде і про зовнішні сенсорах, які здатні визначати, коли пристрій змінює орієнтацію в просторі, і про сенсорних екранах (тачскрін), що сприймають складні жести, які можуть ініціювати подію на пристрої Android надає такі API, які дозволяють розробнику отримувати доступ до сенсорів, а користувачеві – взаємодіяти з пристроєм різними інтерактивними способами Ми досліджуємо деякі подібні API і поговоримо про сенсорах, NFC (комунікації ближнього поля), бібліотеці жестів і доступність пристрою

СЕНСОРИ

Функціонал сучасного смартфона не обмежується лише можливостями, повязаними з тією чи іншою вхідної або вихідної комунікацією Після оснащення телефонів зовнішніми сенсорами, які здатні повідомляти інформацію про те середовище, де знаходиться телефон, апарат став більш потужним і корисним як для користувача, так і для розробника Починаючи з версії Android 15 (API рівня 3), в телефоні доступний стандартний набір сенсорів До фізичних сенсорам відносяться в тому числі акселерометр, що вимірює прискорення за різними осях, гіроскоп, який обчислює обертальний зміна навколо певних осей, сенсори магнітного поля, які відстежують силу магнітних полів по ряду осей, світлові сенсори, що вимірюють силу навколишнього світла, сенсори близькості, що визначають, наскільки близько пристрій знаходиться до зовнішнього обєкта, температурні сенсори, що вимірюють температуру навколишнього середовища, а також сенсори тиску, що діють подібно барометра Величина, безпосередньо виміряна кожним з сенсорів, вважається результатом «сирих вимірювань», тому асоціативний сенсор можна вважати сенсором необроблених даних (raw sensor) Деякі сенсори дозволяють комбінувати вимірювання або збирати їх результати, і розрахунки можуть проводитися над зібраними величинами, щоб отримати результати більш складних вимірювань Наприклад, при інтеграції величин обертальних змін, що фіксуються гіроскопом, і вимірювання часу, за який ці зміни відбуваються, можна розрахувати вектор обертання Часто складні вимірювання такого роду виконуються комбінованими сенсорами

Для доступу до набору сенсорів Android надає зручну системну службу, звану SensorManager Доступ до цієї служби здійснюється за допомогою методу getSystemService (), що відноситься до класу Context, з аргументом ContextSENSOR_SERVICE Потім за допомогою SensorManager можна звернутися до конкретного сенсору за допомогою методу getDefaultSensoK)

Правда, іноді може бути повернутий комбінований сенсор, тому, якщо ви хочете отримати доступ до сенсора необробленої інформації і до даних, які з ним асоційовані, використовуйте метод getSensorl_ist ():

Після отримання сенсора або набору сенсорів ви можете активувати їх і приступити до отримання їх даних, зареєструвавши слухач, який прийматиме такі дані Дані почнуть прибувати з такою частотою, яку ви задасте як аргумент Ця частота може мати значення SENSORDELAYNORMAL, SENSOR_DELAY_UI (частота, відповідна для фундаментальних взаємодій з інтерфейсом користувача), SENSORDELAYGAME (висока частота, яка підійде для більшості ігор), SENSOR_DELAY_FASTEST (подача даних відразу ж по мірі їх надходження) Крім того, затримку між подіями можна вказати в мілісекундах:

Два методи SensorEventListener – onAccuracyChangedO і onSensorChanged () – викликаються, коли виявляються доступні дані від даного нас сенсора Метод onAccuracyChanged () викликається щоразу, коли у сенсора змінюється рівень точності або-частка похибки Метод onSensorChanged (), мабуть, більш цікавий, тим, що ті дані, які передає йому сенсор, виявляються обгорнуті в обєкт SensorEvent

Виключно важливо скасувати реєстрацію слухача і, таким чином, деактивувати сенсор, коли він вам більше не потрібен (наприклад, коли робота активності припинена) В іншому випадку додаток продовжить витрачати ресурси і даремно витрачати енергію Система не зробить цього за вас, навіть якщо екран буде відключений:

mngrunregi sterListener(lіstener)

Поки сенсор включений, обєкт SensorEvent передається слухачеві за допомогою методу onSensorChangedO Саме значення цього обєкта SensorEvent – фактор, специфічний для сенсорів кожного типу

Положення

Координатна система телефону заснована на екрані і на тій орієнтації телефону, яка задана за замовчуванням Осі X, Y і Z розташовані так, як показано на рис 161, і діють таким чином:

вісь X – розташована по горизонталі, позитивні значення знаходяться праворуч, а негативні – зліва

вісь Y – розташована по вертикалі, позитивні значення йдуть вгору, а негативні – вниз

вісь Z – позитивні значення йдуть з екрану, вперед, а негативні – за екран, тому (початок координат по осі z знаходиться на площині екрану)

Рис 161 Координатна система телефону

Коли користувач переміщує телефон, осі переміщуються разом з ним і не міняються місцями

Точність і флуктуації показань різних сенсорів залежать від якості обладнання Часто доводиться позбуватися від значного тремтіння і шуму (наприклад, шляхом використання фільтра нижніх частот) Проектування та створення такого фільтра – завдання, яку доводиться вирішувати розробнику

Акселерометр

Акселерометр вимірює прискорення, наданий з, і повертає значення по трьох осях (значення [0] по осі X, значення [1] по осі У і значення [2] по осі Z) Значення вимірюються в одиницях системи СІ (м/с2) Необхідно відзначити, що сила тяжіння не віднімається з повертаються значень Отже, коли пристрій лежить на столі (наприклад, екраном вгору), значення [2] складе 9,81 м/с2

Оскільки дуже часто доводиться або віднімати від загального показника прискорення силу гравітації, або визначати прискорення за різними осях, Android 23 (API рівня 9) також підтримує сенсор лінійного прискорення і сенсор гравітації

Гіроскоп

Гіроскоп вимірює кутову швидкість або частоту обертання уздовж трьох осей Всі значення обчислюються в рад / с Обертання проти годинникової стрілки має позитивні значення Спостерігач, який дивиться на екран пристрою як звичайно – коли екран розташований в точці (0, 0, 100) в координатної системи пристрою, – повинен повідомити, що якщо пристрій обертається проти годинникової стрілки, то його обертання є позитивним Оскільки йдеться про кутову швидкість, для розрахунку кута необхідно інтегрувати значення протягом деякого періоду часу:

Оскільки це стандартний набір проблем, Android 23 (API рівня 9) підтримує сенсор для визначення вектора обертання Про це показнику ми поговоримо в наступному пункті

Вектор обертання

Вектор обертання в Android 23 і вище представляє орієнтацію пристрою як комбінацію кута і осі, під якими пристрій повернулося на кут 0 навколо осі <х, у. z> Хоча все це можна розрахувати за допомогою гіроскопа, багатьом розробникам доводиться виконувати такі операції досить часто І щоб спростити процедуру використання, Google впровадив концепцію обертання

Є три елементи вектора обертання – Відповідно магнітуда вектора обертання дорівнює sin (0/2), а напрямок вектора обертання одно напрямку осі обертання Три елементи вектора обертання дорівнюють останнім трьом компонентам одиничного кватерниона Елементи вектора обертання є безрозмірними величинами

Лінійне прискорення

В Android 23 (API рівня 9) підтримуються сенсори ще одного типу, покликані спростити типові обчислення, повязані із застосуванням акселерометра Пересилається значення – це тривимірний вектор, який вказує прискорення уздовж кожної осі пристрою, не враховуючи гравітації Це означає, що результуючі значення рівні лінійному прискоренню по кожній з осей мінус вплив гравітації на цю вісь Таким чином, стає простіше виключити ефект впливу гравітаційної постійної, яка безперервно впливає на телефон, використовуваний на Землі Всі значення вимірюються в м/с2

Гравітація

Значення, одержувані від цього сенсора, складають тривимірний вектор, який вказує напрямок і магнітуду гравітації Цей сенсор також відноситься до Android 23 (API рівня 9) і забезпечує стандартні обчислення Всі значення вимірюються в м/с2

Інші сенсори

В Android також підтримуються наступні сенсори

Сенсор світла – надає масив з одного значення (значення [0]), що виражає рівень навколишнього світла в одиницях системи СІ – люксах (1х)

Сенсор магнетизму – вимірює силу оточуючих магнітних полів в мікротесел (ЦТ) по осях X, Y і Z

Сенсор тиску – зустрічається на деяких пристроях Якщо такий сенсор є, то його значення обчислюються в кілопаскалях (кПа)

Близькість – вимірює масив з одного значення (значення [0]), що виражає відстань від сенсора, що вимірюється в сантиметрах У деяких випадках сенсор близькості може виконувати тільки бінарне вимір: «близько» (0) або «далеко» (1) У такому випадку відстань, яка дорівнює або перевищує, ніж значення методу getMaximumRangeO, який відноситься до сенсора, поверне результат «далеко», а всі інші значення – результат «Близько»

Температура – це ще один сенсор, який зустрічається на пристроях нечасто Значення виражаються в градусах за стоградусной шкалою Цельсія (С)

Джерело: Android Програмування на Java для нового покоління мобільних пристроїв

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*