Android занесен в черный список

В нашем приложении мы создали LocationListener. Иногда телефон переходит в "GPS Gap" и просто останавливает передачу данных о местоположении. Мы наблюдали какое-то время, и единственное, что, похоже, переместило его из этого состояния, - это перезагрузка телефона.

Я подключил их, чтобы отключить журналы и нашел это:

02-18 13:35:43.671   703   948 I LocationManagerService: handleLocationChanged for android.uid.system:1000, Provider: passive
02-18 13:35:43.671   703   948 I LocationManagerService: handleLocationChanged for com.google.uid.shared:10040, Provider: passive
02-18 13:35:43.671   703   948 I LocationManagerService: handleLocationChanged for com.google.uid.shared:10040, Provider: passive
02-18 13:35:43.671   703   948 D LocationManagerService: dropping location (blacklisted): com.google.android.apps.maps matches com.google.

Посмотрев на упомянутые исходные файлы, он просто проверяет черный список, который он создает, и, по-видимому, не сообщает об этом, если он находится в черном списке.

Взглянув на код и выше, он выглядит как его данные о блокировке для чего-либо com.google, но я не знаю почему.

Я искал и ничего не нашел на этом и надеялся на помощь.

Ответ 1

Вы должны подключить свой телефон к среде IDE и перезагрузить его, наблюдая за логическими изменениями, которые могут вносить вклад в запрет местоположения. Я думаю, что вероятная причина в том, что ваш идентификатор устройства занимает некоторое время, чтобы зарегистрировать антенну сотового телефона, и это то, что вызывает перезагрузку, чтобы временно появиться, чтобы устранить проблему.

Ответ 2

Черные списки и белые списки местоположения сохраняются в значениях Settings.Secure locationPackagePrefixBlacklist и locationPackagePrefixWhitelist соответственно. Эти значения содержат префикс имени пакета с разделителями-запятыми. LocationBlacklist.isBlackListed() сначала проверяет черный список на соответствие, а затем проверяет белый список для исключения. LocationBlacklist регистрирует a ContentObserver, поэтому любые изменения значений настроек немедленно влияют.

Как и в Android 5.1, с помощью getLastLocation() и handleLocationChangedLocked() от LocationManagerService списков, а также updateFences() от GeofenceManager. Они просто возвращают null или выходят молча, если префикс приложения или полное имя занесены в черный список. Все другие API-интерфейсы не затронуты.

Поскольку вы наблюдаете изменение времени выполнения в черном списке, должен быть системный процесс, добавляющий com.google к значению Settings.Secure через некоторое время после загрузки. Если вы не можете определить это, возможно, вручную изменив значение с помощью командной строки sqlite3, вы сможете восстановить обновления для своего приложения. В какой-то момент он может быть изменен, но идентификация виновника может быть проще, чем ждать перезагрузки каждый раз. Вы также можете попробовать добавить com.google.android.apps.maps к исключениям из белого списка.

Что касается основной причины вашей проблемы, я полагаю, что черный список выполняется какой-то частью Gapps на вашем устройстве. Возможно, он думает, что он работает внутри эмулятора или виртуальной машины? У вас работает пользовательский ПЗУ?