Contra a abordagem tradicional de solicitar que o usuário vá para a página de configurações, habilite os serviços de localização e volte novamente, percebi uma maneira mais simples de fazer o mesmo em alguns dos aplicativos mais recentes.
Referindo-se à captura de tela abaixo, ele solicita uma caixa de diálogo ao usuário para habilitar os serviços de localização com apenas um clique e funciona nesses aplicativos.
Como posso conseguir o mesmo?
Respostas:
Esta caixa de diálogo é criada por LocationSettingsRequest.Builder disponível no Google Play Services.
Você precisa adicionar uma dependência ao seu aplicativo
build.gradle
:Então você pode usar este exemplo mínimo:
Você pode encontrar o exemplo completo aqui .
fonte
You need to add a dependency to your app build.gradle: compile 'com.google.android.gms:play-services:8.1.0'
app
Siga os passos mencionados abaixo
1) Crie um de
LocationRequest
acordo com seu desejo2) Crie um
LocationSettingsRequest.Builder
3) Comece
LocationSettingsResponse
Task
usando o seguinte códigoNota:
LocationServices.SettingsApi
está obsoleto, portanto, use emSettingsClient
vez disso.4) Adicione um
OnCompleteListener
para obter o resultado da Tarefa. Quando o forTask
concluído, o cliente pode verificar as configurações de localização observando o código de status doLocationSettingsResponse
objeto.CASO 1:: O
LocationSettingsStatusCodes.RESOLUTION_REQUIRED
local não está habilitado, mas podemos pedir ao usuário para habilitar o local, solicitando que ele ative o local com a caixa de diálogo (chamandostartResolutionForResult
).CASO 2:: As
LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE
configurações de localização não são satisfeitas. No entanto, não temos como corrigir as configurações, por isso não mostraremos a caixa de diálogo.5)
OnActivityResult
podemos obter a ação do usuário na caixa de diálogo de configurações de localização.RESULT_OK
=> Usuário ativou o local.RESULT_CANCELLED
- O usuário recusou a solicitação de configuração de local.fonte
Funciona de maneira semelhante ao Google Maps
Adicionar dependência no arquivo build.gradle
isso ou aquilo
fonte
Declaração de Variável
Abrir caixa de diálogo usando o código abaixo
onActivityResult
fonte
rae.startResolutionForResult(activity, REQUEST_CHECK_SETTINGS)
chamarstartIntentSenderForResult(rae.getResolution().getIntentSender(), REQUEST_CHECK_SETTINGS, null, 0, 0, 0, null)
, caso contrárioonActivityResult()
, não será chamado.startIntentSenderForResult
no métodoopenGpsEnableSetting()
?openGpsEnableSetting()
simplesmente inicia uma caixa de diálogo para habilitar as configurações de GPS. Após terminar,onActivityResult()
é chamado comrequestCode == REQUEST_ENABLE_GPS
.onActivityResult()
é chamado de Activity e gostaria de saber se é possível retornar o resultado para oFragment
semelhantestartIntentSenderForResult
.Obrigado a Mattia Maestrini +1
Solução Xamarin:
NOTA:
Isso não funcionará com a Huawei ou outros dispositivos que não tenham os serviços do Google instalados.
fonte
using android.Gms.Common.Apis; using Android.Gms.Location;
? Depois de ligarLocationServices.SettingsApi.CheckLocationSettings
, você recebe um retorno de chamadaresult.SetResultCallback(
? Coloque um ponto de interrupção em cada um deles e verifique o que o código está fazendoO Android Marshmallow 6 oferece suporte à permissão de tempo de execução. As permissões de tempo de execução só funcionam no Marshmallow e no pré-Marshmallow ainda funciona da maneira antiga.
Você pode aprender mais sobre isso neste vídeo oficial do desenvolvedor Android:
https://www.youtube.com/watch?v=C8lUdPVSzDk
E solicitando permissão: http://developer.android.com/training/permissions/requesting.html
fonte
Obrigado Mattia Maestrini pela resposta, gostaria de adicioná-lo usando
compile 'com.google.android.gms:play-services-location:8.1.0'
seria o suficiente. Isso evita que seu aplicativo inclua bibliotecas desnecessárias e ajuda a manter baixa a contagem de métodos.
fonte
Solução Kotlin
Adicionar
build.gradle(Module:app)
depois disso crie esta função
fonte
Com a atualização recente do Marshmallow, mesmo quando a configuração de localização está ativada, seu aplicativo exigirá explicitamente pedir permissão. A maneira recomendada de fazer isso é mostrar a seção Permissões de seu aplicativo, onde o usuário pode alternar a permissão conforme necessário. O snippet de código para fazer isso é o seguinte:
E substitua o
onRequestPermissionsResult
método conforme abaixo:Outra abordagem é que você também pode usar o SettingsApi para perguntar quais provedores de localização estão habilitados. Se nenhum estiver habilitado, você pode solicitar uma caixa de diálogo para alterar a configuração de dentro do aplicativo.
fonte
A maneira mais simples que encontrei durante minha pesquisa é criar uma classe Util para este processo de solicitação de local e, em seguida, chamá-la para ligar o GPS para nós.
Por favor, verifique este blog! Contou toda a história.
fonte