Стежимо за своєю дівчиною за допомогою 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); по-друге, це банально садить батарею, що може змусити власника задуматися і пошукати ненажерливе додаток; і, по-третє, фоновий трафік прекрасно видно в системному журналі.



Координати «Скайфол»
Для отримання координат від джерела даних існує метод getLastKnownLocation:
Повертається об'єкт Location містить всю інформацію про місцезнаходження, яку підтримує джерело. Він може включати в себе час, точність отриманих координат, широта, довгота, висоту над рівнем моря (ось воно, втручання в приватне життя!) І швидкість. Всі ці властивості доступні через геттери:
Кульова блискавка
Дані GPS, які повертаються методом getLastKnownLocation або широкомовною приймачем, не зміняться, поки хоча б одна програма не запитав оновлення розташування. В результаті при першому запуску емулятора getLastKnownLocation, швидше за все, поверне null, а приймач і зовсім відмовиться спрацьовувати.
Щоб це виправити, можна скористатися наступним трюком:
Помістивши це код в OnCreate активності, ми змусимо додаток безперервно опитувати координати, що призведе до спрацьовування нашого ж широкомовного приймача. Зрозуміло, після налагодження цей код на стероїдах потрібно випалити розпеченим залізом. Не забудь!

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