Eu sei que a questão sobre como ligar / desligar GPS programaticamente no Android tem sido discutido muitas vezes , ea resposta é sempre a mesma:
"Você não pode, por razões de segurança / privacidade, precisa encaminhar para a tela de preferências de localização e permitir que o usuário ative / desative".
Entendo que, no entanto, recentemente comprei o Tasker do mercado e, entre muitas outras coisas que você pode realizar com ele, é possível definir regras para ativar automaticamente o GPS ao entrar em aplicativos predeterminados e desativá-lo na saída (consulte aqui o tutorial sobre como fazê-lo, e simplesmente funciona!) e este aplicativo não pode ser assinado com a chave de assinatura de firmware, pois funciona em muitas versões do Android e em diferentes dispositivos, e você não precisa nem estar enraizado.
Eu gostaria de fazer isso no meu aplicativo. Obviamente, eu não quero aumentar a privacidade dos usuários, então, primeiro pergunto ao usuário se ele deseja ativá-lo automaticamente com a caixa de seleção típica "lembrar minha decisão" e se ele responder sim, habilite-o.
Alguém tem alguma idéia ou pista de como Tasker consegue isso?
Todas essas respostas não são permitidas agora. Aqui está o correto:
Para todos aqueles que ainda procuram a resposta:
Veja como o OLA Cabs e outros aplicativos estão fazendo isso.
Adicione isso no seu onCreate
Estes são os métodos implementados:
Aqui está a documentação do Android para o mesmo.
Isso é para ajudar outros caras se eles ainda estão lutando:
Edit : Adicionando o comentário de Irfan Raza para mais ajuda.
fonte
ATIVAR GPS:
DESATIVAR GPS:
fonte
Esse código funciona em telefones ROOTED se o aplicativo for movido para
/system/aps
, e eles têm as seguintes permissões no manifesto :Código
fonte
Desde a versão 4.4 do Android, você não pode ativar / desativar o GPS programaticamente. Se você tentar o código proposto nesta resposta , uma exceção será acionada.
fonte
Em vez de usar a intenção Settings.ACTION_LOCATION_SOURCE_SETTINGS, você pode exibir pop-up diretamente em seu aplicativo como o Google Map e Gps ao clicar no botão ok, não é necessário redirecionar para a configuração, basta usar meu código como
Nota: Essa linha de código abre automaticamente a caixa de diálogo se o Local não estiver ativado. Este pedaço de linha é usado no Google Map também
fonte
Para ativar ou desativar o GPS programaticamente, você precisa de acesso 'root' e o BusyBox instalado. Mesmo com esses, a tarefa não é trivial.
A amostra está aqui: Google Drive , Github , Sourceforge
Testado com Androids 2.3.5 e 4.1.2.
fonte
A resposta correta acima é muito antiga, precisa de algo novo, então aqui está a resposta
Como na última atualização, temos suporte para androidx, primeiro inclua dependência no arquivo build.gradle no nível do aplicativo
depois adicione seu arquivo de manifesto:
não se esqueça de obter o consentimento do usuário para essas permissões se você estiver liberando
agora aqui está o código, basta usá-lo
se algo der errado, por favor me ping
fonte
Uma resposta foi desenvolvida em outra pergunta, mas foi fechada e eu gostaria que a comunidade tentasse também.
Ver este comentário
Essa solução exigiria as permissões
WRITE_SETTINGS
eWRITE_SECURE_SETTINGS
.fonte
android.permission.WRITE_SECURE_SETTINGS
permissão no manifesto.Talvez com truques de reflexão ao redor da classe
android.server.LocationManagerService
.Além disso, existe um método (desde a API 8)
android.provider.Settings.Secure.setLocationProviderEnabled
fonte
Settings.Secure
classe parece promissora, no entanto, recebo uma exceção de segurança dizendo que preciso de android.permission.WRITE_SECURE_SETTINGS e continuo recebendo o erro ao adicionar essa permissão (e WRITE_SETTINGS também) ao meu manifesto. Mas parece uma boa maneira de continuar pesquisando. Obrigado :)WRITE_SECURE_SETTINGS
tem um nível de proteçãosystemOrSignature
necessário para tornar esse aplicativo um sistema para que ele funcione, o que também é mencionado nesta resposta .Esta é a melhor solução fornecida por
Google Developers
. Simplesmente chame esse método em onResume de onCreate após a inicializaçãoGoogleApiClient
.Nota: Essa linha de código abre automaticamente a caixa de diálogo, se
Location
não estiver ativada. Este pedaço de linha é usado no Google Map tambémfonte
run time
permissão concedida.Este código funciona em telefones ROOTED:
Para desligar o GPS, você pode usar este comando
Você também pode alternar a precisão da rede usando os seguintes comandos: para ativar o uso:
e para desligar, você pode usar:
fonte
As coisas mudaram desde que esta pergunta foi publicada. Agora, com a nova API de serviços do Google, você pode solicitar que os usuários ativem o GPS:
https://developers.google.com/places/android-api/current-place
Você precisará solicitar a permissão ACCESS_FINE_LOCATION no seu manifesto:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Assista também a este vídeo:
https://www.youtube.com/watch?v=F0Kh_RnSM0w
fonte
Este funciona para mim.
É mais simples que a resposta de Rj0078 nesta pergunta ( https://stackoverflow.com/a/42556648/11211963 ), mas essa também é funcionada.
Ele mostra uma caixa de diálogo como esta:
(Escrito em Kotlin)
fonte
Você só precisa remover a
LocationListener
partir deLocationManager
fonte
Use este código Simples e fácil de acessar:
Permissões:
Siga este código para acessar o GPS programaticamente:
fonte