Перейти до основного вмісту

Запис треку

Огляд​

У цій статті розглядаються проблеми із записом GPX-треків, які тривалий час спостерігаються в різних версіях Android та iOS. Під фоновим режимом ми маємо на увазі, що застосунок OsmAnd не відображається на передньому плані, особливо коли екран пристрою вимкнено (що відрізняється від внутрішнього визначення фонового режиму в пристроях).

Примітки:

  • Починаючи з Android 11 (грудень 2020), більше не існує системного дозволу Завжди дозволяти доступ до місцезнаходження у фоновому режимі, але це не обмежує фоновий запис треків в OsmAnd. Згідно з документацією Google, тепер це вважається використанням на передньому плані, оскільки дозвіл на використання служби на передньому плані використовується внутрішньо, і системне сповіщення про запис треку завжди видиме.

  • Зверніть увагу, що нові формулювання в Android можуть вводити в оману:

    • Дозволити під час використання застосунку означає, що застосунок може безперервно отримувати дані про місцезнаходження, доки він відображається на екрані або має видиме сповіщення на панелі сповіщень Android, як це робить OsmAnd під час навігації або запису поїздки. (Технічно це називається режим переднього плану).

    • Дозволити завжди, з іншого боку, означає, що застосунок в принципі може отримувати ваше місцезнаходження "непомітно" без виконання жодної з цих умов. Але Android обмежує частоту доступу до місцезнаходження в цьому (фоновому) режимі приблизно до одного разу на годину, що, безумовно, не є правильним режимом для навігаційного застосунку.

Записані треки «шумні»​

Існує 2 типові проблеми з точністю, що призводять до безладного записаного треку.

  • Тривале перебування на одному місці або занадто частий запис точок (відповідні зигзаги перебільшують справжні значення).
  • Слабкий сигнал GPS або перемикання на визначення місцезнаходження за сигналом мережі.

Заходи для пом'якшення:

  • Призупиняйте запис під час зупинок або використовуйте фільтр Мінімальне зміщення плагіна "Запис поїздки".

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

  • Також можна відредагувати трек пізніше і видалити "шумні" точки.

  • Або ви можете використовувати налаштування плагіна "Запис поїздки", щоб фільтрувати "шумні" точки вже під час запису, виходячи з вашого досвіду та пристрою запису. Ви можете фільтрувати точки за різними критеріями:

    • Точки з низькою або нульовою швидкістю.
    • Точки з поганою точністю (GPS 'hdop').
    • Точки, розташовані ближче, ніж заданий поріг у метрах.
  • Google Services API або Android API. Ви можете додатково змінити спосіб отримання даних про місцезнаходження в OsmAnd на пристроях Android. У Налаштування OsmAnd → Джерело місцезнаходження виберіть між Google Play Services та Android API, у багатьох випадках перемикання на Android API допомагає покращити записані треки та зробити їх менш "шумними".

Записані треки мають прогалини​

Налаштування OsmAnd для запису треку​

Оптимізація Android для запису треку​

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

  • Виключіть OsmAnd з Оптимізації батареї. У Налаштуваннях вашого пристрою Android знайдіть OsmAnd у розділі Застосунки, Програми або Диспетчер застосунків. Знайдіть розділ Батарея, Енергозбереження або Споживання енергії та виключіть OsmAnd з оптимізації батареї. (Issue #5255)

  • Вимкніть режим Енергозбереження. Цей режим має високу ймовірність вплинути/завершити роботу навіть служб переднього плану, таких як запис поїздки в OsmAnd.

  • Вимкніть Адаптивне енергозбереження. Якщо ця функція увімкнена, вона застосовуватиме загальносистемні політики на основі шаблонів використання для деактивації/активації вищезгаданого режиму "енергозбереження".

  • Вимкніть Адаптивну батарею, якщо ви не користуєтеся застосунком OsmAnd регулярно. Адаптивна батарея працює для кожного застосунку окремо, також на основі шаблонів використання. Її вплив на конкретний застосунок можна зменшити, виключивши цей застосунок з Оптимізації батареї (наприклад, встановивши значення Не оптимізовано). Однак Адаптивна батарея все ще може завершувати роботу служб переднього плану, таких як запис поїздки в OsmAnd, якщо пристрій вважає, що OsmAnd належить до вашого пулу "рідко використовуваних" застосунків.

Перевірені налаштування живлення для Android 9, 10 і 11 (Hardy, 2020-08-25)​

Наступні налаштування живлення були успішно протестовані на Android 9, 10, а пізніше і 11 (на пристроях Samsung), щоб OsmAnd записував треки без розривів. Будь ласка, перегляньте ці 10 налаштувань і встановіть їх відповідно:

  • (1) Енергозбереження (режим) = ВИМК. (або Оптимізовано в Android 10)
  • (2) Адаптивне енергозбереження = ВИМК. (Коли ввімкнено, режим енергозбереження іноді може активуватися, що не дозволяє OsmAnd вести запис.)
  • (3) Адаптивна батарея = УВІМК. (У будь-якому разі не впливає на застосунки, виключені з оптимізації батареї, див. (9) нижче, якщо застосунок не використовується рідко. Для надійності вимкніть.)
  • (4) Переводити невикористовувані застосунки в режим сну = УВІМК. (Але OsmAnd має бути виключено з оптимізації батареї, див. (9) нижче!)
  • (5) Автоматично вимикати невикористовувані застосунки = ВИМК. (Схоже, є лише в Android 9.)
  • (6) Оптимізація налаштувань = ВИМК. (В Android 10 у розділі Обслуговування пристрою / Додатково, в Android 11, схоже, відсутнє.)
  • (7) Автооптимізація (щодня) = УВІМК. (Тут не впливає.)
  • (8) Автоперезапуск (у задані години) = ВИМК. (Тут не впливає.)
  • (9) Оптимізація використання батареї (У Налаштуваннях Android / Застосунки / OsmAnd / Батарея або Налаштування / Застосунки / меню з трьома крапками / Особливий доступ / Оптимізація використання батареї / Усі / OsmAnd) = Виключити OsmAnd з оптимізації батареї (дуже рекомендується, хоча не обов'язково, якщо застосунок часто запускається користувачем).
  • (10) Дозволити фонову активність = УВІМК. для OsmAnd у Застосунки / OsmAnd / Батарея для Android 11

Деякі з цих налаштувань взаємодіють між собою, тому будьте уважні. Найкраще шукати наведені вище налаштування за назвою (з виразами в дужках і без них). Залежно від вашої версії Android вони можуть бути розкидані по різних екранах налаштувань Android:

  • Обслуговування пристрою
  • Обслуговування пристрою / три крапки / Автоматизація
  • Обслуговування пристрою / Додатково
  • Обслуговування пристрою / Батарея
  • Обслуговування пристрою / Батарея / Налаштування
  • Обслуговування пристрою / Батарея / Керування живленням застосунків
  • Обслуговування пристрою / Батарея / Інші налаштування батареї

Control the Behavior of iOS Background Apps​

iOS може автоматично призупиняти або зупиняти фонові застосунки, коли системні ресурси перерозподіляються. OsmAnd не може змінити цю поведінку. Якщо запис треку переривається, коли пристрій заблоковано, це може залишити пропуски в записі. Ви можете відредагувати ці пропуски за допомогою інструмента Plan a Route.

Для отримання додаткової інформації про те, як iOS обробляє відстеження місцезнаходження, перегляньте документацію Apple тут.

Як відстежувати пройдену відстань​

OsmAnd не має спеціального віджета, схожого на одометр, ви можете використовувати плагін "Запис поїздки", щоб відстежувати пройдену відстань і скидати її за потреби.

OsmAnd 3.9: проблеми з висотою під час використання Google Play Services​

Google Play змінив свою політику, і для її дотримання OsmAnd, починаючи з версії 3.9 (за винятком збірок Nightly, F-Droid та Huawei), зобов'язаний використовувати Google Play Services для отримання даних про місцезнаходження під час роботи у фоновому режимі (тобто, за термінологією Android, як служба переднього плану з видимим системним сповіщенням).

Після цієї зміни, схоже, виникла проблема із записом висоти: очевидно, Google Play Services дуже агресивно інтерполюють вимірювання висоти, див. GitHub issue #10864. Ця проблема стосується Android 10, можливо, не Android 11. Про проблему вже повідомлено на вебсайті Google, і, ймовірно, її буде виправлено 09-03-2021.

Як обхідний шлях, у Налаштування OsmAnd → Джерело місцезнаходження ви можете перемкнути джерело місцезнаходження з Google Play Services на Android API.

OsmAnd 3.9: пробудження GPS тепер замінено безперервною службою переднього плану (2020/12)​

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

Попередня стратегія використання режиму doze та періодичного пробудження GPS була видалена з нашого коду (коміт Drop waking navigation service on alarm), як того вимагають нові обмеження Google Play щодо доступу до місцезнаходження у фоновому режимі. У результаті наступні розділи (A) та (B) застосовуються лише до версій OsmAnd до 3.9:

(A) Стратегія пробудження GPS

  • (A1) Під час використання OsmAnd, наприклад, навігації. Ми тримаємо модуль GPS системи увімкненим весь час, оскільки безперервна інформація про місцезнаходження є ключовою тут. Вплив на використання батареї (порядок величини) становить приблизно 5% на годину на старіших системах до Android 4.4 і 2-3% для новіших систем.
  • (A2) Для фонового запису треку без одночасної навігації. Для запису з інтервалами до 15 секунд ми також тримаємо GPS увімкненим, інші стратегії не заощаджуватимуть багато енергії батареї.
  • (A3) Для інтервалів >=30сек, ми вмикаємо GPS лише для кожної точки вибірки. Це має певний помітний вплив на точність записаних точок, але зменшує використання батареї до порядку величини 1.2% на годину для запису треку з 30-секундними інтервалами.

(B) Проблеми пробудження GPS

Щоб досягти пробудження GPS, досі ми використовуємо Android Alarm Manager для періодичного пробудження пристрою (також з режиму Doze, який був введений в Android 6). Нові версії Android ввели такі проблеми:

  • (B1) setRepeating() в Alarm Manager став неточним починаючи з Android 4.4:
    Пом'якшення: тепер ми використовуємо setRepeating() лише до Android 4.2, новий метод setExact() починаючи з Android 4.4 та setExactAndAllowWhileIdle() для Android 8+. (Issue #5632)
  • (B2) Починаючи з Android 4.4, системи обмежують кількість повторних виконань setExact(), наприклад до одного разу на 5 або навіть 15 хвилин. (Фактичне значення, схоже, дуже залежить від пристрою.)
    Наразі гарного рішення не знайдено. Поточне пом'якшення полягає в тому, що ми не використовуємо пробудження через Alarm Manager, а натомість тримаємо GPS постійно ввімкненим для фонового запису треку на пристроях з Android 5+ для всіх інтервалів запису, коротших за 5 хвилин. Це забезпечує надійні й точні треки ціною більшого споживання батареї. (Issue #5632)