@ 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.
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.
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?
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
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
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.
Respostas:
O comando é:
Onde,
settings
faria alterações emsettings.db
(parte decom.android.providers.settings
)put
é atualizar a chavelocation_providers_allowed
com o valorgps
na tabelasecure
.O comando acima mencionado não ativaria o Serviço de Localização do Google. Para habilitá-lo também, emita o comando:
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 keyevent
sempre que ativar o serviço do zero.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.
Alguns dispositivos, como os do Lollipop, têm três modos de locais, e os valores relevantes a serem passados no comando acima seriam:
gps,wifi,network
ougps,network
(se você não quiser o Wi-Fi ativado)wifi,network
ounetwork
apenasgps
Para desativar o modo Localização
Vejo :
Mas eu já dei uma grande ideia usando
settings put
.fonte
location_providers_allowed
a descontinuação ( developer.android.com/reference/android/provider/… ). Ideias?adb shell am start -a android.settings.LOCATION_SOURCE_SETTINGS
, em seguida, clique no botão alternar.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
fonte
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
fonte
location_providers_allowed
não funciona mais no Android 10 (nível 29 da API).Em vez disso, você pode definir o
location_mode
queLOCATION_MODE_HIGH_ACCURACY
com um valor de 3:OBSERVAÇÃO: Provavelmente não funcionará> v29, pois isso já foi preterido, pois os documentos no Modo de Localização mencionam:
Não sei que maneira programática de fazer isso através do shell será assim que essa constante desaparecer.
fonte