Обновления GPS в фоновом режиме на долгое время

Я реализовал службу переднего плана, чтобы получать обновления GPS для более длительных пробежек, например, 3 часов, когда приложение находится в фоновом режиме. Это требование нашего бизнеса. Но приложение перестает получать обновления через несколько минут. Я вижу, что "значок местоположения" на верхней панели исчезает, хотя мое уведомление службы переднего плана все еще там.

Я также исключил свое приложение из списка оптимизации батареи из настроек, чтобы Android не убивал мое приложение. Это помогает поддерживать обновления GPS только в течение примерно получаса, затем снова значок местоположения исчезает, и я перестаю получать обновления GPS.

Что я могу сделать, чтобы он всегда был включен?


person M. Usman Khan    schedule 09.10.2019    source источник
comment
По теме: https://dontkillmyapp.com/   -  person Markus Kauppinen    schedule 09.10.2019
comment
Вы можете запустить эту службу отдельным процессом, добавив android:process=":FusedLocationService" в свой Service компонент в manifest.xml. Я сделал это и работал с большинством устройств, за исключением некоторых производителей, таких как Honor и других, потому что они настроили Android AOSP для лучшего взаимодействия с пользователем.   -  person M D    schedule 09.10.2019
comment
@MD хорошо, я попробую это   -  person M. Usman Khan    schedule 09.10.2019
comment
@MD спасибо, вроде работает. Вы помещаете свой ответ, чтобы я мог принять   -  person M. Usman Khan    schedule 10.10.2019
comment
Вау, рад это слышать. Позвольте мне опубликовать ответ, чтобы он помог и другим   -  person M D    schedule 10.10.2019


Ответы (2)


Я отправляю этот ответ на основе моего короткого комментария и запроса OP

Эту службу можно запустить отдельным процессом, добавив android:process=":FusedLocationService" в компонент службы в manifest.xml.

Я сделал это и работал с большей частью устройств, за исключением некоторых производителей, таких как Honor и других, потому что они настроили Android AOSP для лучшего взаимодействия с пользователем.

person M D    schedule 10.10.2019
comment
Спасибо. Это сработало для меня. Хотя было очень сложно обрабатывать отдельные процессы, все эти межпроцессные коммуникации ... - person M. Usman Khan; 11.10.2019
comment
Вы знаете, почему это работает? я бы тоже хотел это знать - person M. Usman Khan; 11.10.2019
comment
@ M.UsmanKhan Насколько мне известно, если вы создаете отдельную службу, это может не зависеть от вашего основного процесса приложения, а также использует ресурсы отдельно от вашего основного приложения. Таким образом, даже если ваш основной процесс приложения будет убит, эта отдельная служба никогда не повлияет. - person M D; 11.10.2019
comment
хм Мне было интересно, что отдельный процесс не убивается. В любом случае, спасибо! - person M. Usman Khan; 11.10.2019
comment
@ M.UsmanKhan Большинство устройств работали хорошо, но некоторые устройства, такие как Honor и т. Д., Могут не работать. - person M D; 11.10.2019

https://developer.android.com/about/versions/oreo/background-location-limits.html

Помимо этого, вы можете использовать JobScheduler для получения данных о местоположении через определенный интервал (примерно 15 минут). Вы также можете создать логику a / c для версии ОС.

И при получении местоположения используйте FLP (FusedLocationProvider)

Надеюсь, это поможет, но после того, как все это зависит от бренда Mobile (например, ONE PLUS), вы столкнетесь с проблемами. Вам также необходимо справиться с этим сценарием.

person Piyush    schedule 09.10.2019
comment
Мне нужно местоположение GPS каждые 5 секунд. Если я использую FPL каждые 5 секунд, это не будет получать новое местоположение от GPS, верно? это просто скажет мне последнее лучшее место. - person M. Usman Khan; 10.10.2019
comment
Да, верно, FPL всегда будет показывать последнее местоположение. После API 28 добиться этого очень сложно. На Github есть проект GpsTracker serach, который может дать вам некоторое представление о нем. проверьте это также github.com/smtrz/GPSTracker-Android - person Piyush; 10.10.2019