Фиктивное местоположение на Xiaomi: MIUI и HyperOS

Жалоба «включаю подмену, через пару минут всё возвращается» почти всегда приходит с телефонов Xiaomi, Redmi и POCO. Причина не в приложении: MIUI и HyperOS управляют фоновыми процессами жёстче, чем «чистый» Android, и выгружают сервис, который держит подмену. Ниже — что именно происходит и какие три настройки это лечат.

  1. Включите автозапуск для приложения

    Настройки → Приложения → Все приложения → Mock Location → «Автозапуск» (на части версий — «Запуск в фоне»). Это самая важная настройка из трёх: без неё система, убив процесс, не станет поднимать его заново, и подмена не восстановится, пока вы не откроете приложение вручную.

    Экран приложения в настройках MIUI: переключатель «Автозапуск» включён
  2. Снимите ограничения батареи

    На том же экране приложения найдите «Экономия батареи» или «Контроль активности» и выберите «Без ограничений». В этом режиме прошивка перестаёт усыплять фоновый сервис по своему усмотрению.

    Выбор режима экономии батареи для приложения: отмечено «Без ограничений»
  3. Закрепите приложение в списке недавних

    Откройте список недавних приложений, потяните карточку Mock Location вниз — появится значок замка. Закреплённые приложения не закрываются при очистке списка «крестиком» или свайпом «убрать всё».

    Список недавних приложений: карточка Mock Location закреплена значком замка и не закрывается при очистке
  4. Проверьте, что подмена держится

    Включите подмену, сверните приложение и оставьте телефон в покое на десять-пятнадцать минут. Затем проверьте: уведомление в шторке должно остаться на месте, а стороннее картографическое приложение — по-прежнему показывать выбранную точку.

    Постоянное уведомление Mock Location в шторке: подмена геопозиции выполняется в фоне

Что происходит под капотом

Прошивка убивает процесс приложения — в системных журналах это видно как принудительное завершение по решению системы. После этого тестовые провайдеры остаются зарегистрированными в Android с последним записанным значением, но новые координаты в них никто не пишет: процесс, который их создал, больше не существует.

Снаружи это выглядит как «подмена зависла»: координата держится прежней, но перестаёт обновляться, а через некоторое время система возвращает реальное местоположение.

Что приложение делает само

Два механизма восстановления работают независимо от настроек прошивки. Первый: при открытии приложение сверяет сохранённое состояние с фактическим и, если процесс умирал, заново поднимает подмену — этот путь надёжен всегда. Второй: сторожевой таймер периодически проверяет состояние в фоне и пытается поднять сервис сам.

Но у обоих есть предел: если прошивка запрещает приложению стартовать в фоне, поднять сервис без вашего участия невозможно — код в этот момент просто не выполняется.

Почему автозапуск важнее остальных настроек

Разница измерима. С выключенным автозапуском система после убийства процесса не перезапускает сервис вовсе — восстановление происходит только когда вы сами откроете приложение. С включённым автозапуском система поднимает убитый сервис примерно за три секунды, приложение подхватывает сохранённое состояние и продолжает подмену без вашего участия.

Поэтому если из трёх настроек делать только одну — делайте автозапуск.

Восстановление после перезагрузки

Активная подмена восстанавливается автоматически при загрузке телефона, причём по самому раннему системному событию — ещё до того, как вы разблокируете экран. На телефоне с PIN-кодом это единственный способ вернуть подмену, не дожидаясь, пока вы возьмёте телефон в руки.

Замер на реальном устройстве с HyperOS показал, зачем это нужно: ранняя очередь событий загрузки доходит до приложения за секунду с небольшим, тогда как обычная — за семнадцать секунд, потому что впереди стоят системный апдейтер, облачные сервисы и банковские приложения.

Те же настройки на других прошивках

Похожее поведение встречается у Huawei (Настройки → Батарея → Запуск приложений → отключить автоматическое управление для приложения), Samsung (Настройки → Обслуживание устройства → Батарея → Ограничения фоновой активности), OPPO, realme и vivo. Названия отличаются, смысл один: разрешить приложению работать в фоне и исключить его из агрессивной экономии батареи. Если подмена всё равно слетает — разбор частых причин.

Mock Location — подмена геолокации на Android без root

Бесплатно, вне Google Play. Перед установкой можно сверить контрольную сумму файла.

Скачать APK