Всегда запускайте службу в фоновом режиме как root на Android - PullRequest
3 голосов
/ 11 апреля 2019

Согласно этой теме после того, как Android Oreo , Google ввел некоторые фоновые ограничения, поэтому невозможно запустить Сервис всегда в фон без отображения уведомления пользователя.

Можно ли добиться этого с правами суперпользователя?

РЕДАКТИРОВАТЬ: я вижу, что люди голосуют, чтобы закрыть мой вопрос, потому что, похоже, он выглядит слишком широким, но я использую LineageOS , и я бы хотел, чтобы мое приложение работало как системная служба, если возможно, и я думаю, что это было бы возможно без изменения исходного кода. Например, при установке ОС я мог прошить GApps, но это было необязательно, и они, кажется, имеют ту функциональность, о которой я говорю. Я также не ожидаю, что вы сделаете все мои исследования для меня, и я готов принять ответ, который укажет мне правильное направление.

Ответы [ 2 ]

3 голосов
/ 14 апреля 2019

На самом деле есть недокументированная команда оболочки, которую можно использовать для пакетов из белого списка, добавив их в глобальный location_background_throttle_package_whitelist (я не проверял):

settings put global location_background_throttle_package_whitelist "package1,package2,package3"

^ этодля location услуг, но могут быть и другие background_throttle доступные настройки:

settings list global | grep background_throttle

Источник: Разработчики XDA .


Также в исходный код Я нашел только эти настройки:

Settings.Global.LOCATION_BACKGROUND_THROTTLE_PACKAGE_WHITELIST
Settings.Global.LOCATION_BACKGROUND_THROTTLE_PROXIMITY_ALERT_INTERVAL_MS
Settings.Global.LOCATION_BACKGROUND_THROTTLE_INTERVAL_MS

Документация ясно говорит о том, что определенные службы добавляются во временную 1023 * белый список.Чтобы узнать, что на самом деле заносит в эти списки эти сервисы, нужно было бы копать дальше.Эти фоновые ограничения службы фактически описаны в Context.java ... в то время как методы, отмеченные @UnsupportedAppUsage, являются теми, которые используются только системой.


The Firebase WorkManager по-прежнему остается лучшим вариантом - или базовым JobIntentService , который по-прежнему будет работать как обычная фоновая служба O.Перепрошивка Android N или Lineage OS 14.1 была бы определенным обходным решением, которое едва ли рассматривается.

Предположение, что разрешения root будут предоставлять сверхдержавы, может быть ошибочным.Разрешение беспрепятственного доступа к местоположению все еще весьма ограничено, и даже собственные службы Google только временно занесены в белый список.Единственными службами, исключенными из этих фоновых ограничений на выполнение, будут системные службы Linux , написанные в C++ (которые работают вне JVM) - хотя это нечто иное, чем фоновые службы Android, написанные в Java (которые работают внутри JVM и все расширяют один и тот же ограниченный класс Service).

1 голос
/ 14 апреля 2019

Один метод, который я нашел, который работает довольно хорошо, это использовать связанный сервис.Уведомление пользователя не требуется, и поскольку вы никогда не вызываете startService (), оно работает на Oreo и выше.Корень тоже не нужен.Хорошее место для привязки к сервису, который всегда будет работать, - это метод onCreate () вашего объекта приложения.Когда приложение работает, служба будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...