No Android Marshmallow, as permissões devem ser solicitadas no tempo de execução quando são necessárias, em vez de todas de uma vez quando um aplicativo é instalado. No entanto, só consigo solicitar permissões de uma atividade, o que é um problema, pois meu aplicativo contém apenas serviços. (Por que isso, você pode perguntar? O app tem um mostrador de relógio Android Wear incorporado e tudo o que o telefone faz é procurar fotos próximas para enviar para o relógio - nenhuma atividade necessária. Mas requer permissões de localização.)
Então, existe alguma maneira de solicitar permissões de um serviço? Ou de alguma forma forçar as permissões a serem concedidas no momento da instalação como no passado?
android
wear-os
android-permissions
android-6.0-marshmallow
Tony Wickham
fonte
fonte
Respostas:
requestPermission()
só pode ser chamado de umActivity
e não de umService
(ao contrário decheckPermission()
que apenas requerPackageManager
). Portanto, você precisa fazer algum trabalho extra para contornar isso; você precisa fornecer umActivity
em seu aplicativo e, por exemplo,Service
pode verificar as permissões de que precisa e, se ainda não foram concedidas, pode criar uma notificação e informar o usuário com uma mensagem curta descritiva do motivo de haver uma notificação e o que precisa acontecer quando eles clicam na notificação, etc.fonte
Context
que também implementeOnRequestPermissionsResultCallback
. A funcionalidade é semelhante ao padrãorequestPermission()
.Eu concordo, isso é muito problemático para os serviços, acho que você deveria relatar um problema na página Android Developer Preview para isso.
No momento, acho que a melhor solução é verificar a permissão no serviço e mostrar uma notificação se a permissão estiver faltando. Melhor ainda, crie uma DialogActivity para solicitar permissão quando os usuários pressionam a notificação.
fonte
Dê uma olhada na biblioteca PermissionEverywhere . Ele permite que você solicite permissão de qualquer contexto.
Ele cria uma notificação clicando na qual abre uma atividade pedindo uma permissão.
Amostra de código da página github da biblioteca: -
fonte
PermissionEverywhere
, certifique-se de declarar a atividade auxiliar em seu manifesto E certifique-se de que, ao declará-la, ela esteja vinculada ao pacote correto (se estiver usandoPermissionEverywhere
como um pacote separado). Levei muito tempo para perceber que não estava realmente especificando oPermissionEverywhere
pacote no manifesto.PermissionEverywhere
o aplicativo de demonstração de e não funcionou.Existe uma biblioteca muito simples que permite fazer exatamente isso. Você pode verificar as permissões de qualquer lugar (até mesmo de um serviço), com base no fato de o aplicativo estar em primeiro ou segundo plano, ele mostra uma caixa de diálogo normal ou gera uma notificação solicitando permissões. O código é muito fácil de entender e também é muito fácil de usar.
Experimente: Permissões do Android
fonte
Você pode usar
ResultReceiver
para criar um receptor da resposta do usuário e, em seguida, passá-lo como retorno de chamada para a Atividade, por meio de notificaçõesPendingIntent
. Referênciafonte