Стежимо за своєю дівчиною за допомогою android

Сьогодні ми проведемо невелике шпигунське дослідження і спробуємо непомітно зібрати дані про пересування цікавить нас об'єкта - подруги, дитини або, скажімо, бабусі. Зрозуміло, з їх письмово завіреного дозволу на збір і обробку особистої інформації - як же інакше?

Шпигун, вийди геть

Операція «Спектр»

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

Константа ACCESS_FINE_LOCATION задає високий рівень точності для визначення місця розташування користувача. Є ще ACCESS_COARSE_LOCATION для більш грубої геолокації, але нам вона принципово не цікава. До слова, додаток, з яким було видано повноваження fine, автоматично отримує ще й повноваження coarse.

В Android для роботи з геолокації використовується спеціальний інтерфейс, що надається системним об'єктом LocationManager:

Друга геосоставляющая - LocationProvider, набір джерел даних, кожен з яких відображає окрему технологію пошуку місця розташування. Так, GPS_PROVIDER грунтується на даних, отриманих із супутників, NETWORK_PROVIDER шпигує за вишками стільникового зв'язку і Wi-Fi.

Напевно, в твоїй голові вже визрів підступний план - періодично запитувати координати у GPS_PROVIDER і NETWORK_PROVIDER (наприклад, за допомогою фонового сервісу) і відправляти їх в командний центр. Таке рішення в лоб, звичайно, має право на життя, але хіба популярний журнал про безпеку став би про нього писати? По-перше, це помітно - будь включення GPS відображається в статусному рядку значком (рис. 1); по-друге, це банально садить батарею, що може змусити власника задуматися і пошукати ненажерливе додаток; і, по-третє, фоновий трафік прекрасно видно в системному журналі.

Стежимо за своєю дівчиною за допомогою android
Мал. 1. GPS за роботою

Стежимо за своєю дівчиною за допомогою android
Мал. 2. Перший запуск після завантаження пристрою
Стежимо за своєю дівчиною за допомогою android
Мал. 3. Другий запуск після сеансу в Google Maps

Координати «Скайфол»

Для отримання координат від джерела даних існує метод getLastKnownLocation:

Повертається об'єкт Location містить всю інформацію про місцезнаходження, яку підтримує джерело. Він може включати в себе час, точність отриманих координат, широта, довгота, висоту над рівнем моря (ось воно, втручання в приватне життя!) І швидкість. Всі ці властивості доступні через геттери:

Кульова блискавка

Дані GPS, які повертаються методом getLastKnownLocation або широкомовною приймачем, не зміняться, поки хоча б одна програма не запитав оновлення розташування. В результаті при першому запуску емулятора getLastKnownLocation, швидше за все, поверне null, а приймач і зовсім відмовиться спрацьовувати.

Щоб це виправити, можна скористатися наступним трюком:

Помістивши це код в OnCreate активності, ми змусимо додаток безперервно опитувати координати, що призведе до спрацьовування нашого ж широкомовного приймача. Зрозуміло, після налагодження цей код на стероїдах потрібно випалити розпеченим залізом. Не забудь!

Стежимо за своєю дівчиною за допомогою android
Засилаємо координати в емулятор

На секретній службі Її Величності

Коротко нагадаю: в якості механізму передачі повідомлень на рівні системи наміри (Intent) здатні відправляти структуровані дані від процесу до процесу (наприклад, інформацію від GPS-модуля). Для відстеження таких даних і реакції на них реалізуються спеціальні об'єкти - широкомовні приймачі. Їхня основна перевага (для нас) - вони спрацьовують навіть тоді, коли додаток знаходиться в тлі, а деякі (наприклад, прийом СМС) взагалі не вимагають запуску батьківського додатка.

Каркас нашого приймача представлений нижче:

Метод onReceive буде спрацьовувати щоразу при зміні координат пристрою, але спочатку наведений приймач необхідно зареєструвати в маніфесті:

Продовження статті є тільки передплатникам

Варіант 2. Купи одну статтю

Покажи цю статтю друзям: