Atualmente, estou trabalhando em um aplicativo que requer várias permissões "perigosas". Tentei adicionar "pedir permissão" conforme exigido no Android Marshmallow (API Nível 23), mas não consegui descobrir como fazê-lo.
Como posso solicitar permissão usando o novo modelo de permissão no meu aplicativo?
Respostas:
Abra uma caixa de diálogo usando o código abaixo:
Obtenha o resultado da atividade como abaixo:
Mais informações: https://developer.android.com/training/permissions/requesting.html
fonte
ActivityCompat.requestPermissions
obsoleto? (em Nugat)Essa estrutura que estou usando para verificar se meu aplicativo tem permissão e solicitar se ele não tem permissão. Então, no meu código principal, de onde eu quero verificar a gravação a seguir:
O módulo checkIfAlreadyhavePermission () é implementado como:
O módulo requestForSpecificPermission () é implementado como:
e Substituir na Atividade:
Consulte este link para obter mais detalhes: http://revisitingandroid.blogspot.in/2017/01/how-to-check-and-request-for-run-time.html
fonte
checkIfAlreadyhavePermission
quereturn result == PackageManager.PERMISSION_GRANTED;
Eu usei este wrapper (recomendado) escrito por desenvolvedores do google. É super fácil de usar.
https://github.com/googlesamples/easypermissions
Função que lida com a verificação e solicita permissão, se necessário
Feliz codificação :)
fonte
A partir do Android Marshmallow, precisamos solicitar ao usuário permissões específicas. Também podemos verificar o código se a permissão já tiver sido dada. Aqui está uma lista de permissões geralmente necessárias:
Aqui está um código de exemplo para verificar as permissões:
fonte
Minha classe para solicitar permissões de tempo de execução em
Activity
ouFragment
Também ajuda a mostrar justificativa ou abrir a Configuração para ativar a permissão depois que o usuário negou uma opção de permissão (com / sem
Never ask again
) mais facilmenteUsando
Activity
comoCódigo no Github
Demo
fonte
Android-M, ou seja, a API 23 introduziu Permissões de Tempo de Execução para reduzir falhas de segurança no dispositivo Android, onde os usuários agora podem gerenciar diretamente as permissões de aplicativos em tempo de execução. que você mencionou na sua consulta.
Portanto, verifique antes da ação, ou seja, verifique se você tem permissão para acessar o link do recurso e se o seu aplicativo não tiver essa permissão específica, você pode solicitar o link da permissão e lidar com a resposta da solicitação de permissão, como abaixo.
Então, finalmente, é uma boa prática passar por mudanças de comportamento se você planeja trabalhar com novas versões para evitar o fechamento forçado :)
Práticas recomendadas de permissões.
Você pode acessar o aplicativo de amostra oficial aqui .
fonte
No Android Marshmallow (API 23) e acima, por padrão, todas as permissões perigosas (conforme o documento oficial do documento oficial ) estão desabilitadas. Após a instalação, quando o aplicativo for aberto pela primeira vez, você precisará conceder permissão no tempo de execução.
Eu consegui da seguinte maneira:
IN Sua classe de atividade:
fonte
Adicione as permissões ao AndroidManifest.xml
Para verificar a versão do Android, se ela precisa de permissão de tempo de execução ou não.
Peça ao usuário para conceder a permissão, se não for concedida.
Faça algo se a permissão foi concedida ou não.
fonte
Estou usando isso como uma classe de fragmento base. Só peço permissões de um fragmento, mas você pode refatorá-lo e criar uma versão semelhante da Activity.
Existem dois métodos principais que você deve usar:
hasPermissionOrWillAsk - Use para verificar se uma permissão foi solicitada e negada por um usuário que não deseja ser solicitado novamente. Isso é útil para desativar a interface do usuário quando o usuário dá sua resposta final sobre NÃO querer um recurso.
runNowOrAskForPermissionsFirst - Use isso para executar algum código que requer permissões. Se o usuário já tiver concedido permissão, o código será executado imediatamente. Caso contrário, o código será executado mais tarde se o usuário conceder permissão. Ou não mesmo. É bom porque você especifica o código em um só lugar.
Aqui está um exemplo:
É um prazer receber feedback sobre isso. Não que este exemplo específico seja um pouco simplificado, pois você também precisa verificar se os Serviços de Localização estão habilitados no dispositivo. (Isso é diferente de permissões.) Além disso, ele suporta apenas uma permissão por vez, mas seria simples de modificar se você precisar suportar mais de uma por vez.
fonte
Pode ser uma maneira mais limpa. Adicione todas as suas permissões em uma matriz como
Qualquer que seja sua permissão, crie um método para cada permissão
Chame esse método no onCreate
Agora substitua onRequestPermissionsResult
fonte
Para várias permissões de cada vez, você pode usar isso. Este trabalho para mim .. Eu tenho outra solução. se você der a sua targetSdkVersion abaixo 22, ela funcionará para mim. e comportamento como obter permissão do manifest.xml. Testado e funciona para mim.
Para mais detalhes. Verifique o link abaixo
https://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en
fonte
Para lidar com a permissão de tempo de execução, o Google forneceu um projeto de biblioteca. Você pode verificar isso aqui https://github.com/googlesamples/easypermissions
O EasyPermissions é instalado adicionando a seguinte dependência ao seu arquivo build.gradle:
Para começar a usar o EasyPermissions, sua Activity (ou Fragment) substitui o método onRequestPermissionsResult:
Aqui você obterá um exemplo prático de como essa biblioteca funciona https://github.com/milon87/EasyPermission
fonte
Existe uma boa biblioteca que pode ser usada caso as permissões precisem ser solicitadas quando a permissão for necessária por um serviço em segundo plano. Embora uma limitação da biblioteca seja que ela não pode ser usada apenas para determinar se as permissões são concedidas no momento ou não ao aplicativo. Ele sempre pergunta ao usuário se o aplicativo ainda não o possui.
Experimente, pois simplifica a vida: Permissões do Android
fonte
Este código abaixo funciona perfeitamente. Estou explicando com a ajuda de um exemplo.
No meu caso, coloquei as verificações de permissão separadamente em uma classe util e passei as permissões específicas que preciso verificar nas classes apropriadas. Isso permitiu reutilizar o arquivo util de verificação de permissão em todo o aplicativo.
A parte do código abaixo mostra a chamada de função. Nesse caso, estou solicitando
android.Manifest.permission.READ_EXTERNAL_STORAGE
permissão.No caso acima, a permissão é verificada se for permitida a
onAttachPressed();
função é chamada, caso contrário, verificamos a solicitação de permissão.A seguir está o código presente na classe util no meu caso
PermissionUtils
E após a solicitação, se você quiser chamar a função de
onRequestPermissionsResult
ou precisará pressionar o botão novamente para a chamada da função.Então, basta chamá-lo de
onRequestPermissionsResult
fonte
Eu uso a biblioteca da biblioteca RxPermission para pedir permissão. Porque é um código longo que precisamos escrever para pedir permissão.
Adicione essas dependências no seu
build.gradle
fonte
Tente isto
Essa é a maneira mais simples de solicitar permissão na versão Marshmallow.
Nota: - Não se esqueça de adicionar esta mesma permissão no arquivo de manifesto também
O segundo código de método para verificar a permissão é concedido ou não?
E substitua o método
fonte
Maneira simples de pedir permissão, evitando escrever muito código,
https://github.com/sachinvarma/EasyPermission
Como adicionar :
Como pedir permissão:
Esperando que seja útil para alguém.
fonte
Eu passei por todas as respostas, mas não satisfazi exatamente a minha resposta necessária, então aqui está um exemplo que eu escrevi e funciona perfeitamente, até o usuário clica na caixa de seleção Não perguntar novamente .
Crie um método que será chamado quando você desejar solicitar permissão de tempo de execução como,
readContacts()
ou você também pode teropenCamera()
como mostrado abaixo:Agora precisamos fazer
askContactsPermission()
, você também pode nomeá-lo comoaskCameraPermission()
ou qualquer permissão que você solicitar.Antes de escrever esta função, verifique se você definiu a variável de instância abaixo, como mostrado:
Agora, etapa final para substituir o
onRequestPermissionsResult
método, como mostrado abaixo:Aqui terminamos com as permissões RunTime, o complemento é o
openPermissionSettingDialog()
que simplesmente abre a tela Configuração se o usuário desativar permanentemente a permissão clicando em Não perguntar novamente . abaixo está o método:O que perdemos? 1. Definindo as strings usadas em
strings.xml
Inicializando a
parentLayout
variável dentro doonCreate
métodoparentLayout = findViewById (R.id.content);
Definindo a permissão necessária em
AndroidManifest.xml
O
queryContacts
método, com base em sua necessidade ou na permissão de tempo de execução, você pode chamar seu método antes do qualpermission
era necessário. no meu caso, eu simplesmente uso o carregador para buscar o contato, como mostrado abaixo:Isso funciona muito bem com a codificação feliz :)
fonte
Se você estiver usando o AndroidX Activity 1.2.0 ou o AndroidX Fragment 1.3.0 :
Existem novas APIs de resultado da atividade que você pode usar para solicitar permissões:
fonte
fonte
Você pode usar minha biblioteca - NoPermission (é apenas uma classe)
compile 'ru.alexbykov:nopermission:1.1.1'
Amostra
onRequestPermissionResult:
Acho api mais conveniente do que
EasyPermissions
pelo Google.fonte
Permissão de tempo de execução em qualquer lugar no aplicativo Aqui está um exemplo
e código de chamada assim:
você pode encontrar mais Github
fonte
A permissão de tempo de execução cria muitos códigos padrão na atividade fortemente acoplada. Para reduzir o código e facilitar as coisas, você pode usar a biblioteca Dexter .
fonte
PERMISSÃO RUNTIME NO ANDROID
O método OnClick é verificar a permissão de tempo de execução
e se a permissão for restrita, ele solicitará permissão
fonte