Разработка сайта для Вашего бизнеса. Веб дизайн. Дизайн логотипа, фирменного стиля, рекламная фотография . Комплексный рекламный креатив.

Ralex. We do the work.
На рынке с 1999го года. Средняя ценовая категория. Ориентация на эффективность решений.
Ознакомтесь с нашим портфолио
Узнайте больше о услугах
Свяжитесь с нами:
E-mail: [email protected]
Tel: (044) 587 - 84 - 78
Custom web design & дизайн и разработка сайта "под ключ"
Креативный, эффективный дизайн. Система управления сайтом (СУС).
Custom flexible разработка систем электронной коммерции
Система e-commerce разрабатывается под индивидуальные потребности. Гибкая функциональность.
Search Engine Optimzation & оптимизация под поисковые системы (SEO)
Постоянная оптимизация и мониторинг сайта в поисковых системах. Достигаем результата быстро и эффективно
Custom logo design & дизайн логотипа и фирменного стиля
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.
профессиональная рекламная фотография
креативно, смело, качественно
Custom logo design & рекламный креатив. дизайн рекламы
Многолетний опыт. Огромное портфолио. Уникальное предложение и цена.

Розробка додатків, що використовують датчики, для телефонів і планшетних ПК на базі процесорів Intel® Atom ™ і під управлінням ОС Android *

  1. Розробка додатків, що використовують датчики, для телефонів і планшетних ПК на базі процесорів Intel®...
  2. Таблиця 1. Типи датчиків, які підтримуються платформою Android
  3. Таблиця 2. Інфраструктура датчиків на платформі Android
  4. Система координат датчика
  5. Моніторинг подій датчиків
  6. Датчики руху
  7. акселерометр
  8. гіроскоп
  9. датчики положення
  10. магнітометр
  11. наближення
  12. Датчики навколишнього середовища
  13. Датчик освітленості (ALS)
  14. барометр
  15. Принципи налаштування продуктивності і оптимізації датчиків
  16. GPS і розташування
  17. Сервіси визначення місцеположення Android
  18. Отримання оновлень даних про розташування GPS
  19. Принципи налаштування і оптимізації продуктивності сервісів GPS, щоб визначити місцеположення
  20. Висновок
  21. про автора

Розробка додатків, що використовують датчики, для телефонів і планшетних ПК на базі процесорів Intel® Atom ™ і під управлінням ОС Android *

Наша взаимовыгодная связь https://banwar.org/

Ця інструкція призначена для розробників додатків і в ньому міститься огляд інфраструктури датчиків, які підтримуються ОС Android, а також обговорюється використання деяких датчиків, які, як правило, присутні в телефонах і планшетних ПК на базі процесорів Intel® Atom ™. Тут обговорюються датчики руху, положення і навколишнього середовища. Хоча компоненти GPS не вважаються датчиками в інфраструктурі Android, сервіс визначення місця розташування на основі GPS також обговорюється в цьому керівництві. Всі присутні в цьому посібнику теми відносяться до ОС Android 4.2 Jelly Bean.

Датчики на телефонах і планшетних ПК на базі процесорів Intel® Atom ™

У телефонах і планшетних ПК на базі процесорів Intel Atom під управлінням ОС Android можуть використовуватися різні апаратні датчики. Всі вони застосовуються для виявлення рухів, розташування і збору даних, що характеризують навколишнє середовище. На малюнку 1 представлена ​​схема можливої ​​конфігурації датчиків на звичайному пристрої на базі процесора Intel Atom під управлінням ОС Android.

Малюнок 1
Малюнок 1. Датчики в системі Android на базі процесора Intel® Atom ™

З урахуванням повідомляються даних датчики Android можуть розділятися на класи і типи, представлені в таблиці 1.

Датчики руху Акселерометр
(TYPE_ACCELEROMETER) Вимірює прискорення пристрою в м / с2 Виявлення руху Гироскоп
(TYPE_GYROSCOPE) Вимірює швидкості обертання пристрою Виявлення обертання Датчики визначення положення Магнітометр
(TYPE_MAGNETIC_FIELD) Вимірює силу геомагнітного поля Землі в мкТл Компас Наближення
(TYPE_PROXIMITY) Вимірює близькість об'єкта в см. Виявлення найближчого об'єкта GPS
(Не тип android.hardware.Sensor) Отримує дані про точне географічне місцезнаходження пристрою Виявлення точного географічного розташування Датчики навколишнього середовища ALS
(TYPE_LIGHT) Вимірює рівень освітленості в люксах Автоматичний контроль яскравості екрану Барометр Вимірює тиск навколишнього повітря в миллибарах Визначення висоти

Таблиця 1. Типи датчиків, які підтримуються платформою Android

Інфраструктура датчиків Android

Інфраструктура датчиків Android пропонує механізми доступу до датчиків і їх даними, за винятком GPS, доступ до якого здійснюється за допомогою сервісів визначення місця розташування ОС Android. Вони також будуть обговорюватися в цій статті. Інфраструктура датчиків є частиною пакета android.hardware. У таблиці 2 перераховані класи і інтерфейси інфраструктури датчиків.

Ім'яТипОпис

SensorManager Клас Використовується для створення екземпляра сервісу датчика. Надає різні методи доступу до датчиків, можливості реєстрації та скасування реєстрації приймачів подій датчиків і т.д. Датчик Клас Використовується для створення екземпляра конкретного датчика. SensorEvent Клас Використовуються системою для публікації даних датчика. Сюди відносяться вихідні значення даних датчика, тип датчика, точність даних і штамп часу. SensorEventListener Інтерфейс Надає методи виклику для отримання сповіщень від класу SensorManager після зміни даних або точності показань датчика.

Таблиця 2. Інфраструктура датчиків на платформі Android

Отримання конфігурації датчиків

Виробники пристроїв індивідуально приймають рішення про те, які датчики будуть доступні на пристрої. Ви повинні з'ясувати, які датчики доступні під час виконання, викликаючи для цього метод getSensorList () інфраструктури датчиків SensorManager з параметром "Sensor.TYPE_ALL". У прикладі коду 1 представлений список доступних датчиків, постачальник, енергоспоживання і інформація про точність кожного датчика.

package com.intel.deviceinfo; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Fragment; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorManager; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; import android.widget.SimpleAdapter; public class SensorInfoFragment extends Fragment {private View mContentView; private ListView mSensorInfoList; SimpleAdapter mSensorInfoListAdapter; private List <sensor> mSensorList; private SensorManager mSensorManager; @Override public void onActivityCreated (Bundle savedInstanceState) {super.onActivityCreated (savedInstanceState); } @Override public void onPause () {super.onPause (); } @Override public void onResume () {super.onResume (); } @Override public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {mContentView = inflater.inflate (R.layout.content_sensorinfo_main, null); mContentView.setDrawingCacheEnabled (false); mSensorManager = (SensorManager) getActivity (). getSystemService (Context.SENSOR_SERVICE); mSensorInfoList = (ListView) mContentView.findViewById (R.id.listSensorInfo); mSensorInfoList.setOnItemClickListener (new OnItemClickListener () {@Override public void onItemClick (AdapterView <?> arg0, View view, int index, long arg3) {// with the index, figure out what sensor was pressed Sensor sensor = mSensorList.get ( index); // pass the sensor to the dialog. SensorDialog dialog = new SensorDialog (getActivity (), sensor); dialog.setContentView (R.layout.sensor_display); dialog.setTitle ( "Sensor Data"); dialog.show ( );}}); return mContentView; } Void updateContent (int category, int position) {mSensorInfoListAdapter = new SimpleAdapter (getActivity (), getData (), android.R.layout.simple_list_item_2, new String [] { "NAME", "VALUE"}, new int [] {android.R.id.text1, android.R.id.text2}); mSensorInfoList.setAdapter (mSensorInfoListAdapter); } Protected void addItem (List <Map <String, String >> data, String name, String value) {Map <String, String> temp = new HashMap <String, String> (); temp.put ( "NAME", name); temp.put ( "VALUE", value); data.add (temp); } Private List <? extends Map <String,? >> getData () {List <Map <String, String >> myData = new ArrayList <Map <String, String >> (); mSensorList = mSensorManager.getSensorList (Sensor.TYPE_ALL); for (Sensor sensor: mSensorList) {addItem (myData, sensor.getName (), "Vendor:" + sensor.getVendor () + ", min. delay:" + sensor.getMinDelay () + ", power while in use: "+ sensor.getPower () +" mA, maximum range: "+ sensor.getMaximumRange () +", resolution: "+ sensor.getResolution ()); } Return myData; }}

Приклад коду 1. Фрагмент, який представляє список датчиків **

Система координат датчика

Інфраструктура датчиків являє дані датчика, використовуючи стандартну 3-осьову систему координат, де X, Y і Z відповідно представлені значеннями values ​​[0], values ​​[1] і values ​​[2] в об'єкті SensorEvent.

Деякі датчики, такі як датчики світла, температури, наближення і тиску, повертають тільки поодинокі значення. Для цих датчиків використовуються тільки значення об'єкта SensorEvent - values ​​[0].

Інші датчики представляють дані в стандартній 3-осьовий системі координат. Нижче наведено список таких датчиків:

  • акселерометр
  • датчик гравітації
  • гіроскоп
  • Датчик геомагнітного поля

3-осьова система координат датчика вибирається щодо екрану пристрою в його звичайної (за замовчуванням) орієнтації. Для телефону орієнтація за замовчуванням - портретна; для планшетного ПК - альбом-па. Коли пристрій утримується в своєму звичайному положенні, вісь х спрямована по горизонталі і вказує вправо, вісь у направлена ​​вертикально вгору, а вісь z вказує за межі екрану (назустріч наглядачеві). На малюнку 2 показана система координат датчика для телефону, а на малюнку 3 - для планшетного ПК

Малюнок 2
Малюнок 2. Система координат датчика для телефону

Малюнок 3
Малюнок 3. Система координат датчика для планшетного ПК

Найбільш важливим моментом для системи координат датчика є той факт, що ця система ніколи не змінюється, коли пристрій переміщається або змінюється його орієнтація.

Моніторинг подій датчиків

Інфраструктура датчиків являє дані датчика разом з об'єктами SensorEvent. Клас може управляти даними конкретного датчика за допомогою інтерфейсу SensorEventListener і реєстрації SensorManager для даного датчика. Інфраструктура датчиків інформує клас про зміни стану значень датчика за допомогою двох наступних методів виклику SensorEventListener, використовуваних класом:

onAccuracyChanged ()

і

onSensorChanged ()

У прикладі коду 2 представлений SensorDialog, який використовується в прикладі SensorInfoFragment, який обговорювався в розділі "Отримання конфігурації датчиків".

package com.intel.deviceinfo; import android.app.Dialog; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.widget.TextView; public class SensorDialog extends Dialog implements SensorEventListener {Sensor mSensor; TextView mDataTxt; private SensorManager mSensorManager; public SensorDialog (Context ctx, Sensor sensor) {this (ctx); mSensor = sensor; } @Override protected void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); mDataTxt = (TextView) findViewById (R.id.sensorDataTxt); mDataTxt.setText ( "..."); setTitle (mSensor.getName ()); } @Override protected void onStart () {super.onStart (); mSensorManager.registerListener (this, mSensor, SensorManager.SENSOR_DELAY_FASTEST); } @Override protected void onStop () {super.onStop (); mSensorManager.unregisterListener (this, mSensor); } @Override public void onAccuracyChanged (Sensor sensor, int accuracy) {} @Override public void onSensorChanged (SensorEvent event) {if (event.sensor.getType ()! = MSensor.getType ()) {return; } StringBuilder dataStrBuilder = new StringBuilder (); if ((event.sensor.getType () == Sensor.TYPE_LIGHT) || (event.sensor.getType () == Sensor.TYPE_TEMPERATURE) || (event.sensor.getType () == Sensor.TYPE_PRESSURE)) { dataStrBuilder.append (String.format ( "Data:% .3fn", event.values ​​[0])); } Else {dataStrBuilder.append (String.format ( "Data:% .3f,% .3f,% .3fn", event.values ​​[0], event.values ​​[1], event.values ​​[2])); } MDataTxt.setText (dataStrBuilder.toString ()); }}

Приклад коду 2. Діалог, в якому представлені значення датчика **

Датчики руху

Датчики руху використовуються для моніторингу рухів пристрої, таких як тряска, поворот, хитання або нахил. Акселерометр і гіроскоп є два датчика руху, які доступні на багатьох планшетних ПК і телефонах.

Датчики руху представляють дані, використовуючи систему координат, де три значення в об'єкті SensorEvent це значення values ​​[0], values ​​[1] b values ​​[2], що представляють дані по відповідним їм осях координат x, y і z.

Щоб отримати уявлення про датчиках руху і використовувати їх дані в додатку, необхідно застосовувати деякі фізичні формули, пов'язані з силою, масою, прискоренням на підставі законів Ньютона, і відносинами між деякими з цих даних в часі. Щоб отримати інформацію про ці фізичних формулах, зверніться до ваших улюблених підручниками з фізики або популярних сайтів в Інтернеті.

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

Акселерометр вимірює прискорення, яке додається до пристрою. Його властивості наведені в таблиці 3.

ДатчикТипSensorEvent
Дані (м / с2)Опис

Акселерометр TYPE_ACCELEROMETER values [0]
values ​​[1]
values ​​[2] Прискорення по осі x
Прискорення по осі y
Прискорення по осі z

Таблиця 3. Акселерометр

Концепція акселерометра заснована на дії другого закону Ньютона:

a = F / m

Прискоренням об'єкта є результат додатка до нього зовнішньої сили. У число зовнішніх сил входить і сила тяжіння, яка додається до всіх об'єктів на Землі. Вона пропорційна силі F, прикладеної до об'єкта і назад пропорційна масі m об'єкта.

У нашому коді замість прямого використання наведеного вище рівняння ми розглядаємо результат прискорення протягом періоду часу щодо його швидкості і місця розташування. Наступне рівняння описує зв'язок швидкості об'єкта v 1 з його первісної швидкістю v 0, прискоренням a і часом t:

v1 = v0 + at

Для визначення зміщення об'єкта s ми використовуємо таке рівняння:

s = v0t + (1/2) at2

У багатьох випадках ми починаємо з умовою v 0, рівним 0 (перед тим, як пристрій починає рухатися), що спрощує рівняння до:

s = at2 / 2

Через діючої сили тяжіння прискорення вільного падіння, представлене символом g, застосовується до всіх об'єктів на Землі. Чи не залежачи від маси об'єкта, g залежить тільки від широти місця розташування об'єкта зі значенням в діапазоні від 9,78 до 9,82 (м / с 2). Ми приймаємо традиційне стандартне значення, яке використовується для g:

g = 9.80665 (m / s2)

Оскільки акселерометр являє значення з використанням багатовимірної системи координат пристрою, в нашому коді ми можемо розрахувати відстань по осях x, y і z, використовуючи наступні рівняння:

Sx = AxT2 / 2 Sy = AyT2 / 2 Sz = AzT2 / 2

Де Sx, Sy і Sz є зсувами по осях х, у і z відповідно, а Ax, Ay і Az є прискореннями по осях х, у і z, відповідно. T - це час періоду вимірювання

public class SensorDialog extends Dialog implements SensorEventListener {... private Sensor mSensor; private SensorManager mSensorManager; public SensorDialog (Context context) {super (context); mSensorManager = (SensorManager) context.getSystemService (Context.SENSOR_SERVICE); mSensor = mSensorManager.getDefaultSensor (Sensor.TYPE_ACCELEROMETER); ...}

Приклад коду 3. Використання акселерометра **

Іноді ми не використовуємо всі три значення даних. В інших випадках, можливо, буде потрібно прийняти до уваги орієнтацію пристрою. Наприклад, для додатка Лабіринт ми використовуємо тільки дані сили тяжіння для осі х і осі y при обчисленні напрямків і відстаней руху кулі на підставі даних орієнтації пристрою. Наступний фрагмент коду (приклад коду 4) представляє логіку.

@Override public void onSensorChanged (SensorEvent event) {if (event.sensor.getType ()! = Sensor.TYPE_ACCELEROMETER) {return; } Float accelX, accelY; ... // detect the current rotation currentRotation from its "natural orientation" // using the WindowManager switch (currentRotation) {case Surface.ROTATION_0: accelX = event.values ​​[0]; accelY = event.values ​​[1]; break; case Surface.ROTATION_90: accelX = -event.values ​​[0]; accelY = event.values ​​[1]; break; case Surface.ROTATION_180: accelX = -event.values ​​[0]; accelY = -event.values ​​[1]; break; case Surface.ROTATION_270: accelX = event.values ​​[0]; accelY = -event.values ​​[1]; break; } // calculate the ball's moving distances along x, and y using accelX, accelY and the time delta ...}}

Приклад коду 4. Визначення орієнтації пристрою з використанням даних акселерометра в грі Лабіринт **

гіроскоп

Гіроскоп вимірює швидкість обертання пристрою навколо осей x, y і z, як це показано в таблиці 4. Значення даних гіроскопа можуть бути позитивними або негативними. Історично прийнято, що обертання навколо осі проти годинникової стрілки вважається позитивним, а обертання навколо осі за годинниковою стрілкою - від'ємним. Ми також можемо визначити напрямок значення гіроскопа, використовуючи "правило правої руки", показане на малюнку 4.

Малюнок 4
Малюнок 4. Використання правила "правої руки" для визначення позитивного напряму обертання

ДатчикТипSensorEvent
Дані (рад / с)Опис

Гироскоп TYPE_GYROSCOPE values [0]
values ​​[1]
values ​​[2] Швидкість обертання навколо осі x
Швидкість обертання навколо осі y
Швидкість обертання навколо осі z

Таблиця 4. Гироскоп

У прикладі коду 5 показано, як конструювати зразок гіроскопа.

public class SensorDialog extends Dialog implements SensorEventListener {... private Sensor mGyro; private SensorManager mSensorManager; public SensorDialog (Context context) {super (context); mSensorManager = (SensorManager) context.getSystemService (Context.SENSOR_SERVICE); mGyro = mSensorManager.getDefaultSensor (Sensor.TYPE_GYROSCOPE); ...}

Приклад коду 5. Використання гіроскопа **

датчики положення

Багато планшетні ПК Android мають два датчика положення: магнітометр і датчик наближення. Магнітометр вимірює силу магнітного поля Землі по осях х, у і z, а датчик наближення визначає відстань від пристрою до іншого об'єкта.

магнітометр

Найбільш важливим призначенням магнитометра (представлено в таблиці 5) в системах Android є реалізація функцій компаса.

ДатчикТипSensorEvent
Дані (мкТл)Опис

Магнітометр TYPE_MAGNETIC_FIELD values [0]
values ​​[1]
values ​​[2] Сила магнітного поля Землі по осі x
Сила магнітного поля Землі по осі y
Сила магнітного поля Землі по осі z

Таблиця 5. Магнітометр

У прикладі коду 6 показано, як конструювати зразок магнитометра.

public class SensorDialog extends Dialog implements SensorEventListener {... private Sensor mMagnetometer; private SensorManager mSensorManager; public SensorDialog (Context context) {super (context); mSensorManager = (SensorManager) context.getSystemService (Context.SENSOR_SERVICE); mMagnetometer = mSensorManager.getDefaultSensor (Sensor.TYPE_MAGNETIC_FIELD); ...}

Приклад коду 6. Використання магнитометра **

наближення

Датчик наближення вимірює відстань між пристроєм та іншим об'єктом. Пристрій може використовувати його для виявлення того, наскільки близько воно знаходиться до користувача (див. Таблицю 6), визначаючи тим самим, якщо користувач говорить по телефону, і відключаючи екран на час розмови.

Таблиця 6: Датчик наближення Датчик Тип SensorEvent
Дані Опис Наближення TYPE_PROXIMITY values [0] Відстань до об'єкта в см. Деякі датчики наближення можуть лише повідомляти логічне значення для вказівки, що об'єкт знаходиться досить близько.

У прикладі коду 7 показано використання датчика наближення.

public class SensorDialog extends Dialog implements SensorEventListener {... private Sensor mProximity; private SensorManager mSensorManager; public SensorDialog (Context context) {super (context); mSensorManager = (SensorManager) context.getSystemService (Context.SENSOR_SERVICE); mProximity = mSensorManager.getDefaultSensor (Sensor.TYPE_PROXIMITY); ...}

Приклад коду 7. Використання датчика наближення **

Датчики навколишнього середовища

Датчики навколишнього середовища використовуються для виявлення та подання характеристик навколишнього пристрої середовища, таких як світло, температура, тиск або вологість. Датчик освітленості (ALS) і датчик тиску (барометр) доступні на багатьох планшетних ПК з ОС Android.

Датчик освітленості (ALS)

Датчик освітленості, представлений в таблиці 7, використовується в системі для визначення освітленості навколишнього середовища і автоматичного регулювання яскравості екрану.

Таблиця 7: Датчик освітленості Датчик Тип SensorEvent
Дані (люкс) Опис ALS TYPE_LIGHT values [0] Освітлення навколо пристрою

У прикладі коду 8 показано використання датчика освітленості.

... private Sensor mALS; private SensorManager mSensorManager; ... mSensorManager = (SensorManager) context.getSystemService (Context.SENSOR_SERVICE); mALS = mSensorManager.getDefaultSensor (Sensor.TYPE_LIGHT); ...

Приклад коду 8. Використання датчика освітленості **

барометр

Додатки можуть використовувати датчик атмосферного тиску (барометр), представлений в таблиці 8, для обчислення висоти поточного місцезнаходження пристрою.

Таблиця 8: Датчик атмосферного тиску Датчик Тип SensorEvent
Дані (люкс) Опис Барометр TYPE_PRESSURE values [0] Тиск навколишнього повітря в миллибарах.

У прикладі коду 9 показано використання барометра

... private Sensor mBarometer; private SensorManager mSensorManager; ... mSensorManager = (SensorManager) context.getSystemService (Context.SENSOR_SERVICE); mBarometer = mSensorManager.getDefaultSensor (Sensor.TYPE_PRESSURE); ...

Приклад коду 9. Використання барометра **

Принципи налаштування продуктивності і оптимізації датчиків

Щоб використовувати датчики в додатках, ви повинні виконувати наступні рекомендації:

  • Перевіряйте доступність конкретного датчика перед его Використання
    Платформа Android НЕ требует включення або віключення Певного датчика на пристрої. Перед Використання датчика в Вашому додатка нужно спочатку перевіріті его дійсну доступність.
  • Завжди скасовуваті реєстрацію пріймачів датчіків
    Если операція, яка вікорістовує приймач датчика, стане невидимою або діалог буде зупинення, нужно скасуваті реєстрацію приймач датчика. Це може бути зроблено за допомогою методу операції OnPause () або в методі діалогу OnStop (). Інакше датчик буде продовжувати збір даних і, в результаті, розряджати батарею.
  • Чи не блокуйте метод onSensorChanged ()
    Метод onSensorChanged () часто викликається системою для представлення даних датчика. Для цього методу потрібно зовсім небагато логіки. Складні обчислення з даними датчиків повинні бути винесені за межі цього методу.
  • Завжди тестируйте свої додатки, що працюють з датчиками, на реальних пристроях
    Всі датчики, описані в цьому розділі, є апаратними датчиками. Емулятор ОС Android може бути не в змозі імітувати конкретні функції і визначити продуктивність датчика.

GPS і розташування

GPS (Global Positioning System) є системою, заснованої на отриманні супутникових даних, яка видає точну інформацію про географічне положення по всьому світу. Комунікації GPS доступні на багатьох телефонах і планшетних ПК з ОС Android. У багатьох випадках пристрій GPS працює також як датчик положення. Воно може надавати точні дані про місцезнаходження для працюючих на пристрої додатків. На платформі Android пристрій GPS не управляється безпосередньо інфраструктурою датчиків. Замість цього сервіс визначення місця розташування Android взаємодіє і передає дані GPS в додатки через виклики приймача розташування.

У цьому розділі розглядаються тільки сервіси GPS і визначення місця розташування, як якщо б це був апаратний датчик. Зазвичай обсяг стратегій позиціонування, які використовуються в ОС Android 4.2 в апаратних платформах телефонів і планшетних ПК на базі процесорів Intel Atom, значно більше, і дана тема і виходить за рамки цієї статті.

Сервіси визначення місцеположення Android

Використання GPS не є єдиним способом отримання інформації про місцезнаходження пристрою Android. Система також може використовувати Wi-Fi *, стільникові або інші бездротові мережі, щоб отримати дані про поточне місцезнаходження пристрою. GPS і бездротові мережі (включаючи Wi-Fi і стільникові мережі) виступають в якості "постачальників даних визначення місця розташування" для сервісів Android. У таблиці 9 перераховані основні класи та інтерфейси, які використовуються для доступу до сервісів визначення місця розташування в ОС Android.

Таблиця 9. Сервіси визначення місця розташування платформи Android Ім'я Тип Опис LocationManager Клас Використовується для доступу до сервісів визначення місця розташування. Надає різні методи для запиту періодичних оновлень даних місцеположення для програми або для відправки попереджень про наближення LocationProvider Абстрактний клас Абстрактний супер-клас для постачальників визначення місця розташування Місцезнаходження Клас Використовується постачальниками даних місцеположення для інкапсуляції географічних даних LocationListener Інтерфейс Використовується для отримання сповіщень про місцезнаходження з LocationManager

Отримання оновлень даних про розташування GPS

За аналогією з механізмом використання інфраструктури датчиків для отримання даних датчиків, додаток використовує кілька методів викликів, визначених в інтерфейсі LocationListener для збору оновлень даних про розташування GPS. LocationManager відправляє в додаток оповіщення про оновлення даних GPS за допомогою цих викликів (правило - "Не дзвоніть нам, ми самі звернемося до вас").

Для отримання даних про розташування GPS в додатку потрібно запросити дозвіл на отримання точної інформації про місцезнаходження у вашому файлі маніфесту Android (приклад коду 10).

<Manifest ...> ... <uses-permission android: name = "android.permission.ACCESS_FINE_LOCATION" /> ... </ manifest>

Приклад коду 10. Запит дозволу на отримання точної інформації про місцезнаходження у файлі маніфесту **

У прикладі коду 11 представлено, як отримувати оновлення даних GPS і відображати координати широти і довготи в текстовому діалозі.

package com.intel.deviceinfo; import android.app.Dialog; import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.widget.TextView; public class GpsDialog extends Dialog implements LocationListener {TextView mDataTxt; private LocationManager mLocationManager; public GpsDialog (Context context) {super (context); mLocationManager = (LocationManager) context.getSystemService (Context.LOCATION_SERVICE); } @Override protected void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); mDataTxt = (TextView) findViewById (R.id.sensorDataTxt); mDataTxt.setText ( "..."); setTitle ( "Gps Data"); } @Override protected void onStart () {super.onStart (); mLocationManager.requestLocationUpdates (LocationManager.GPS_PROVIDER, 0, 0, this); } @Override protected void onStop () {super.onStop (); mLocationManager.removeUpdates (this); } @Override public void onStatusChanged (String provider, int status, Bundle extras) {} @Override public void onProviderEnabled (String provider) {} @Override public void onProviderDisabled (String provider) {} @Override public void onLocationChanged (Location location) { StringBuilder dataStrBuilder = new StringBuilder (); dataStrBuilder.append (String.format ( "Latitude:% .3f, Logitude% .3fn", location.getLatitude (), location.getLongitude ())); mDataTxt.setText (dataStrBuilder.toString ()); }}

Приклад коду 11. Діалог, що відображає дані про розташування GPS **

Принципи налаштування і оптимізації продуктивності сервісів GPS, щоб визначити місцеположення

Сервіс GPS пропонує найбільш точну інформацію про місцезнаходження пристрою. З іншого боку, будучи апаратним компонентом, він споживає додаткову енергію. Також потрібен час, щоб сервіс GPS міг отримати перші дані про місцезнаходження. Далі наведено кілька рекомендацій, які ви повинні враховувати при розробці додатків з сервісами GPS, щоб визначити місцеположення:

  • Використовуйте всіх доступних постачальників даних про місцезнаходження
    На додаток до сервісу GPS_PROVIDER є сервіс NETWORK_PROVIDER. Якщо з додатком потрібно отримати лише грубі дані про місцезнаходження, ви можете використовувати тільки сервіс NETWORK_PROVIDER.
  • Використовуйте кешированниє розташування
    Потрібен час, щоб сервіс GPS міг отримати перші дані про місцезнаходження. Коли ваше додаток очікує дані від сервісу GPS, щоб отримати їх точне оновлення, для виконання частини роботи ви можете спочатку використовувати розташування, що надаються методом getlastKnownLocation () в класі LocationManager.
  • Мінімізуйте кількість і тривалість запитів для поновлення даних про місцезнаходження
    Ви повинні запитувати поновлення даних про місцезнаходження тільки в разі потреби і оперативно скасовувати реєстрацію менеджера розташування, як тільки дані сервіси паче не будуть потрібні.

Висновок

Платформа Android пропонує розробникам прикладні програмні інтерфейси для забезпечення доступу до вбудованим датчикам пристроїв. Ці датчики здатні надавати вихідні дані про поточний переміщенні, місце перебування, а також про стан навколишнього середовища з високим ступенем точності і достовірності. При розробці додатків, що використовують датчики, ви повинні слідувати визнаним рекомендацій для підвищення продуктивності і ефективності енергоспоживання.

про автора

Мао Вей (Miao Wei) трудиться інженером-програмістом в підрозділі програмного забезпечення і послуг корпорації Intel. В даний час він працює в проектах по розширенню сфер застосування процесорів Intel® Atom ™.

© Корпорація Intel, 2013 г. Все права захищені.
* Інші найменування і товарні знаки є власністю своїх законних власників.

** Цей приклад вихідного коду опублікований на умовах ліцензійної угоди про приклади вихідного коду корпорації Intel

AdapterView <?
Add (temp); } Private List <?
Extends Map <String,?
Категории
  • Биология
  • Математика
  • Краеведению
  • Лечебная
  • Наука
  • Физике
  • Природоведение
  • Информатика
  • Новости

  • Новости
    https://banwar.org/
    Наша взаимовыгодная связь https://banwar.org/. Запустив новый сайт, "Пари Матч" обещает своим клиентам незабываемый опыт и возможность выиграть крупные суммы.


    Наши клиенты
    Клиенты

    Быстрая связь

    Тел.: (044) 587-84-78
    E-mail: [email protected]

    Имя:
    E-mail:
    Телефон:
    Вопрос\Комментарий: