É 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?



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.


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


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


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.