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 на вашем устройстве. Возможно, он думает, что он работает внутри эмулятора или виртуальной машины? У вас работает пользовательский ПЗУ?