Можно ли включить Location Services через Shell?

14

Можно ли включить службы определения местоположения (GPS или Google NetworkLocation) через ADB или эмулятор терминала? Я на рутированном телефоне.

Дополнительные баллы: можно ли изменить другие системные настройки?

minicookie
источник
2
@ Иззи, я не думаю, что это полностью дубликат.
Мэтью Читал
2
@ Иззи не имеет отношения. Вопрос, на который вы ссылаетесь, не имеет отношения к службам определения местоположения.
лорддев
1
@lorddev Нет, они явно не упоминаются. Но вы можете использовать тот же код, чтобы вызвать намерение для служб определения местоположения. Что меня немного смущает, так это формулировка моего комментария, который предлагает «прямое попадание» (и здесь вы оба правы: это не совсем то же самое). Трудно сказать, через полгода, что я имел в виду тогда ...
Иззи

Ответы:

12

Можно ли включить службы определения местоположения (GPS или Google NetworkLocation) через ADB или эмулятор терминала?

Команда:

adb shell settings put secure location_providers_allowed gps

где,

  • settingsбудет вносить изменения в settings.db(часть com.android.providers.settings)
  • putобновить ключ location_providers_allowedсо значением gpsв таблице secure.

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

adb shell settings put secure location_providers_allowed gps,network

Вам будет показано всплывающее окно, чтобы согласиться на услуги определения местоположения. В моем Android 4.2.1 я должен согласиться через графический интерфейс или input keyeventкаждый раз, когда я включаю сервис с нуля.

                                                                    IMG: 4.2.1

Тем не менее, в моем Android 5.0 я могу сохранить настройки в диалоговом окне, и выполнение команды сделает все идеально в следующий раз.

                                                                    IMG: 5,0

Некоторые устройства, такие как Lollipop, имеют три режима Locations, и соответствующие значения, которые должны быть переданы в вышеупомянутой команде:

  • Высокая точность: gps,wifi,networkили gps,network(если вы не хотите, чтобы Wi-Fi был включен)
  • Экономия батареи: wifi,networkили networkтолько
  • Только устройство: gps

Чтобы отключить режим местоположения

adb shell settings put secure location_providers_allowed ' '

Можно ли изменить другие системные настройки?

Видеть :

Но я уже дал большую идею, используя settings put.

Повелитель огня
источник
Можно ли добиться того же, но с консоли устройства, а не через ADB внешнего компьютера?
Давид
1
Да, конечно. Хотя на устройстве вам понадобится доступ с правами root или беспроводной ADB. Взгляните на этот ответ в качестве примера. Вы бы поняли.
Повелитель огня
Раньше это работало на Android 5, но больше не работает на Android 6. С или без рута настройка не меняется и остается такой же, как настроена в системе. Вероятно, это как-то связано с отсутствием поддержки location_providers_allowed( developer.android.com/reference/android/provider/… ). Идеи?
gw0
Если вы просто хотите включить / выключить функцию GPS, вы можете перейти на страницу настроек Location, а затем нажать кнопку переключения. Эту операцию также можно выполнить командой:, adb shell am start -a android.settings.LOCATION_SOURCE_SETTINGSзатем нажмите кнопку переключения.
Эдди
13

Для Android 6.0

Чтобы включить использование:

Для GPS: adb shell settings put secure location_providers_allowed +gps

Для сети: adb shell settings put secure location_providers_allowed +network

Отключить :

GPS : adb shell settings put secure location_providers_allowed -gps

Для сети: adb shell settings put secure location_providers_allowed -network

Адитья С
источник
Это сработало для меня, а не принятый ответ.
TheMonkeyKing
Спасибо, это работает. Есть ли в любом случае мы можем включить / отключить GPS и сеть с помощью одной строки ADB команды. Мне это нужно для высокой точности определения местоположения. GPS + сеть = высокая точность
Субан Дьяко
4

Android Location Service поставляется с различными вариантами:

1) высокая точность: gps, network

Включить: adb shell settings put secure location_providers_allowed +gps,network

Отключить: adb shell settings put secure location_providers_allowed -gps,network

2) Только телефон: gps

Включить: adb shell settings put secure location_providers_allowed +gps

Отключить: adb shell settings put secure location_providers_allowed -gps

3) Экономия батареи: network

Включить: adb shell settings put secure location_providers_allowed +network

Отключить: adb shell settings put secure location_providers_allowed -network

Парт Найк
источник
0

location_providers_allowed больше не работает для Android 10 (уровень API 29).

Вместо этого вы можете установить location_modeзначение LOCATION_MODE_HIGH_ACCURACYсо значением 3:

adb shell settings put secure location_mode 3

ПРИМЕЧАНИЕ. Вероятно, не будет работать> v29, поскольку это уже устарело, поскольку в документации по режиму местоположения упоминается:

Эта константа устарела на уровне API 28. Предпочтительные методы для проверки режима местоположения и прослушивания изменений через LocationManager#isLocationEnabled()и LocationManager#MODE_CHANGED_ACTION.

Не знаю, каким будет программный способ сделать это через оболочку, когда эта константа исчезнет.

anotherdave
источник