É possível ativar os Serviços de Localização via Shell?

14

É possível ativar os Serviços de Localização (GPS ou Google NetworkLocation) via ADB ou Emulador de Terminal? Estou em um telefone enraizado.

Pontos extras: Também é possível alterar outras configurações relacionadas ao sistema?

minicookie
fonte
2
@ Izzy Eu não acho que isso seja totalmente duplicado.
Mateus Leia
2
@ Izzy não relacionado. A pergunta que você vinculou não tem nada a ver com os serviços de localização.
Lorddev
1
@ LordDev Não, eles não são mencionados explicitamente. Mas você pode usar o mesmo código para chamar a intenção de serviços de localização. O que me confunde um pouco é a redação do meu comentário, que sugere um "golpe direto" (e aqui vocês dois estão corretos: não é exatamente o mesmo). Difícil dizer, meio ano depois, o que eu tinha em mente naquela época ...
Izzy

Respostas:

12

É possível ativar os Serviços de Localização (GPS ou Google NetworkLocation) via ADB ou Emulador de Terminal?

O comando é:

adb shell settings put secure location_providers_allowed gps

Onde,

  • settingsfaria alterações em settings.db(parte de com.android.providers.settings)
  • puté atualizar a chave location_providers_allowedcom o valor gpsna tabela secure.

O comando acima mencionado não ativaria o Serviço de Localização do Google. Para habilitá-lo também, emita o comando:

adb shell settings put secure location_providers_allowed gps,network

Você verá um pop-up para concordar com os Serviços de Localização. No meu Android 4.2.1, tenho que concordar com a GUI ou input keyeventsempre que ativar o serviço do zero.

                                                                    IMG: 4.2.1

No entanto, no meu Android 5.0, eu posso salvar as configurações na caixa de diálogo e a execução do comando faz as coisas perfeitamente da próxima vez.

                                                                    IMG: 5.0

Alguns dispositivos, como os do Lollipop, têm três modos de locais, e os valores relevantes a serem passados ​​no comando acima seriam:

  • Alta precisão: gps,wifi,networkou gps,network(se você não quiser o Wi-Fi ativado)
  • Economia de bateria: wifi,networkou networkapenas
  • Apenas dispositivo: gps

Para desativar o modo Localização

adb shell settings put secure location_providers_allowed ' '

Também é possível alterar outras configurações relacionadas ao sistema?

Vejo :

Mas eu já dei uma grande ideia usando settings put.

Senhor do Fogo
fonte
Seria possível obter o mesmo, mas a partir do console do dispositivo, não através do ADB de um computador externo?
Davide
1
Sim absolutamente. Você precisaria de acesso root ou ADB sem fio executando no dispositivo. Dê uma olhada nesta resposta como um exemplo. Você teria uma ideia.
Firelord
Isso costumava funcionar no Android 5, mas não no Android 6. Com ou sem raiz, a configuração não muda e permanece a mesma que está configurada no sistema. Provavelmente tem algo a ver comlocation_providers_allowed a descontinuação ( developer.android.com/reference/android/provider/… ). Ideias?
Gw0 #
Se você quiser apenas ativar / desativar a funcionalidade GPS, acesse a página de configurações Localização e clique no botão de alternar. Esta operação também pode ser realizada pelo comando: e adb shell am start -a android.settings.LOCATION_SOURCE_SETTINGS, em seguida, clique no botão alternar.
Eddy
13

Para Android 6.0

Para ativar o uso:

Para GPS: adb shell settings put secure location_providers_allowed +gps

Para rede: adb shell settings put secure location_providers_allowed +network

Desabilitar :

GPS : adb shell settings put secure location_providers_allowed -gps

Para rede: adb shell settings put secure location_providers_allowed -network

Aditya S
fonte
Isso funcionou para mim, não a resposta aceita.
Matt D
Obrigado, funciona. Existe alguma maneira de ativar / desativar GPS e rede com um comando adb de uma linha. Eu preciso dele para localização de alta precisão. gps + rede = alta precisão
Suban Dhyako
4

O Serviço de Localização Android vem com opções diferentes:

1) Alta Precisão: gps, network

Habilitar: adb shell settings put secure location_providers_allowed +gps,network

Desativar: adb shell settings put secure location_providers_allowed -gps,network

2) Apenas telefone: gps

Habilitar: adb shell settings put secure location_providers_allowed +gps

Desativar: adb shell settings put secure location_providers_allowed -gps

3) Economia de bateria: network

Habilitar: adb shell settings put secure location_providers_allowed +network

Desativar: adb shell settings put secure location_providers_allowed -network

Parth Naik
fonte
0

location_providers_allowed não funciona mais no Android 10 (nível 29 da API).

Em vez disso, você pode definir o location_modeque LOCATION_MODE_HIGH_ACCURACYcom um valor de 3:

adb shell settings put secure location_mode 3

OBSERVAÇÃO: Provavelmente não funcionará> v29, pois isso já foi preterido, pois os documentos no Modo de Localização mencionam:

Essa constante foi descontinuada no nível 28 da API. Os métodos preferidos para verificar o modo de localização e escutar alterações são via LocationManager#isLocationEnabled()e LocationManager#MODE_CHANGED_ACTION.

Não sei que maneira programática de fazer isso através do shell será assim que essa constante desaparecer.

outradave
fonte