Prática de aprendizagem do aplicativo de permissão Android

1. Introdução

Antes de mudar para um telefone Android, a impressão do sistema Android é a pista do aplicativo do sistema. O aplicativo pode solicitar várias permissões à vontade e roubar várias privacidade à vontade.Depois de alterar o telefone celular, é sabido que o sistema Android tem um ótimo gerenciamento de permissões Em outras palavras, toda permissão perigosa solicitada exige que o usuário seja avisado.Claro, o Android apenas solicita o usuário o máximo possível.Existem casos em que o usuário não concorda em usá-lo.

O aprimoramento do gerenciamento de permissões adiciona uma certa quantidade de trabalho aos desenvolvedores.A solicitação de permissões perigosas não é mais uma questão simples de adicionar uma linha de código no AndroidManifest.xml, mas a necessidade de solicitar que os usuários apliquem dinamicamente. Depois de entender o aplicativo dinâmico, não acho que seja muito complicado, mas quando não sei, só sei copiar os fragmentos de código prontos na Internet e não sei por onde começar quando preciso solicitar novas permissões. Uma vez colei algumas partes do código de permissão de aplicativo dinâmico, só porque não entendo o princípio, apenas o copio e colo. Embora o código possa ser executado, é extremamente inchado.

Para esse fim, neste artigo, para classificar as permissões do Android, a fim de dominar o gerenciamento de permissões do Android, recusou-se a ser um engenheiro de cópias.

2. O papel da autoridade

O objetivo das permissões é proteger a privacidade dos usuários do Android. Como um sistema de código aberto que pode ser personalizado arbitrariamente, as permissões são realmente a última barreira à privacidade do usuário.O sistema Android exige que, por padrão, nenhum aplicativo tenha o direito de realizar operações que possam afetar adversamente outros aplicativos, sistemas operacionais ou usuários. Incluindo a leitura e gravação de dados particulares do usuário (como contatos ou e-mail), leitura e gravação de arquivos de outros aplicativos, acesso à rede e assim por diante. Para executar essas operações, o aplicativo Android deve obter as permissões correspondentes.

O Android tem centenas de permissões, que podem ser divididas em três categorias, uma é uma permissão comum, a outra é uma assinatura e outra é perigosa.

Entre elas, as permissões comuns se referem àquelas que não ameaçam a segurança e a privacidade dos usuários, como definir permissões de despertador. A concessão de permissões normais para o aplicativo precisa ser declarada apenas no arquivo AndroidManifest.xml, o sistema autorizará automaticamente, nenhuma confirmação do usuário será necessária e o usuário não poderá executar a operação de revogação.

O segundo tipo é a permissão de assinatura. Esse tipo de permissão também é concedido pelo sistema quando o aplicativo é instalado, mas não é concedido incondicionalmente. O aplicativo que deseja usar a permissão deve usar o mesmo certificado que o aplicativo que define a permissão. Por exemplo, o aplicativo A Assinar com certificado A define uma permissão de assinatura.O Aplicativo B deseja usar essa permissão e deve ser assinado pelo certificado A. O cenário em que as permissões de assinatura são usadas é o de que uma empresa tenha vários aplicativos.Para permitir que esses aplicativos se liguem, mas não desejam ser chamados por aplicativos externos, você pode implementar uma permissão de chamada de assinatura personalizada.

Por fim, vejamos o terceiro tipo de permissões perigosas. A razão pela qual as permissões perigosas são perigosas é porque essas permissões envolvem os recursos de dados pessoais sensíveis do usuário ou afetam os dados armazenados do usuário ou outros dados de aplicativos, como a leitura de contatos e abertura de usuários. Atualmente, muitos aplicativos abrem secretamente o microfone para escutar a conversa do usuário e, em seguida, pressionam com precisão o anúncio de acordo com o conteúdo da conversa. Esses rumores são como lendas urbanas. Por causa do desempenho misterioso, eles são amplamente divulgados. Para obter permissões perigosas, um aplicativo deve solicitar ao usuário que ele não pode obter permissões até que o usuário permita. No entanto, afinal, o sistema Android é de código aberto. É possível modificar a função de gerenciamento de permissão nativa do Android. Embora o usuário não tenha concordado, o aplicativo ainda pode obter permissões. Este tópico está além do escopo deste artigo. Pessoalmente, pense que existem outras maneiras melhores de roubar a privacidade. Espionar conversas é o tipo de custo mais alto, que não vale a pena usar.

Como mencionado anteriormente, existem centenas de permissões e não é realista lembrar uma por uma.De fato, desde que saibamos quais são as permissões perigosas, as permissões perigosas são permissões comuns.

Permissões perigosas são divididas em 9 grupos no total e 24. Se as permissões que solicitamos não estiverem nesta tabela, isso significa que são permissões comuns, e agrupamento de permissões significa que essas permissões no grupo pertencem ao mesmo grupo e o usuário concorda em autorizar um grupo de permissões. Todas as permissões do grupo serão concedidas.Por exemplo, depois que o aplicativo receber a permissão READ_EXTERNAL_STORAGE, se você solicitar a permissão WRITE_EXTERNAL_STORAGE novamente, o sistema concederá a permissão imediatamente e não solicitará mais o usuário.
Insira a descrição da imagem aqui

3. Etapas e exemplos para solicitar permissão

  1. A aplicação de permissões normais é simples, basta aplicar no arquivo AndroidManifest.xml, por exemplo, solicitar permissão para definir o alarme
<uses-permission android:name="android.permission.SET_ALARM" />
  1. O aplicativo de permissão de assinatura é semelhante, apenas é necessário modificar protectionLevel na assinatura, por exemplo, definir uma permissão personalizada na permissão de assinatura, o código é o seguinte, outros aplicativos devem ter a mesma assinatura para conceder essa permissão para conceder
    <permission
     android:name="com.test.permission.act"
     android:protectionLevel="signature"/>
    
  2. Ponto importante para solicitar permissões perigosas: por um lado, como as permissões comuns, ele ainda precisa ser declarado no arquivo AndroidManifest.xml. Por outro lado, são necessários aplicativos dinâmicos adicionais. A seguir, o aplicativo usa permissões de leitura e gravação de armazenamento como exemplo.
  • Declarada no arquivo AndroidManifest, esta etapa é essencial

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
    • Verifique as permissões no código de inicialização do aplicativo para confirmar se o aplicativo já possui permissões de armazenamento de leitura e gravação. Esta parte é implementada no código, por isso é chamada de aplicativo dinâmico. Use Android em ContextCompat.checkSelfPermission()verificar os direitos de autorização, este método primeiro parâmetro é o Contexto contexto, o segundo parâmetro é o nome que você deseja aplicar para a permissão, é claro, não pode simplesmente escrever o nome de Tun Town, mas não há um nome específico, a proposta diretamente sintonizar Android Manifest.permissiontem sido O nome definido, por exemplo, a permissão de leitura de armazenamento externo a ser solicitada agora é Manifest.permission.WRITE_EXTERNAL_STORAGE. Este método retorna um tipo int PERMISSION_GRANTED(同意)ou PERMISSION_DENIED`(拒绝). De um modo geral, depois que o programa é instalado pela primeira vez, as permissões solicitadas estão no PERMISSION_DENIEDestado. Você precisa se candidatar. Você não precisa se inscrever novamente depois que o usuário concordar, a menos que você desinstale o aplicativo e o reinstale ou desative as permissões nas configurações do sistema;

    • A próxima etapa é solicitar a permissão.O requestPermissions()método usado para a aplicação.Há três parâmetros passados ​​nesse método.O primeiro é Activity e o segundo é uma matriz de seqüências de permissões que requerem autorização. O terceiro é o código de solicitação que identifica a solicitação de permissão. Ele é usado na função de retorno de chamada para o aplicativo de permissão onRequestPermissionsResult(). Esse valor deve ser maior ou igual a 0. Sua função será descrita em detalhes na função de retorno de chamada. Aqui, desde que seja entendida como uma tag personalizada. Deve-se observar que o pedido de permissão é processado de forma assíncrona, ou seja, o código não bloqueará a espera do usuário clicar, mas o retorno de chamada após o usuário clicar onRequestPermissionsResult(). O código para as duas etapas acima é o seguinte:

 //检查应用是否已经拥有权限
 if(ActivityCompat.checkSelfPermission(MainActivity.this,
               Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
           // 说明没有该权限,就需要申请权限
           ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
       }else {
           //已经拥有权限,做进一步操作
       }
  • Em seguida é a função de acesso callback pedido de substituição onRequestPermissionsResult(), as permissões de aplicativos para processamento adicional, que tem três funções de retorno de chamada retorna um resultado, em primeiro lugar requestCode, o parâmetro que está requestPermissions()solicitando reconhecimento de código de autorização mencionado, o papel é um único número do recibo, de acordo com Podemos determinar o resultado do processamento do número do pedido, ou seja, passar esse parâmetro ao solicitar a permissão.Depois que o processamento for concluído, a função de retorno de chamada será retornada inalterada, para que possamos saber se esse é o resultado do processamento. ; O segundo parâmetro é o array de string de permissão, que é requestPermissions()o array de string de permissão que estamos preenchendo; o terceiro parâmetro é o array de resposta do usuário, a aprovação do usuário de cada aplicativo para permissão está nesse array, esse array O número é uma correspondência individual com a matriz de permissão do aplicativo. O código é o seguinte:
  @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
                //通过requestCode来识别是否同一个请求
        if (requestCode == 1){
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                //用户同意执行的操作
                
            }else{
                //用户不同意不同意执行的操作,例如提示用户不同意不给用。。。
            }
        }
    }

Se você solicitar uma única autoridade acima, e se você solicitar várias autoridades? As etapas básicas são semelhantes à solicitação de uma única permissão, mas como são várias permissões, é necessário processamento adicional, como determinar se cada permissão está autorizada. Vamos solicitar mais uma permissão de gravação

  • Da mesma forma, primeiro faça uma declaração no AndroidManifest.xml
      <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
  • A preparação é criar uma matriz de cadeias de permissão e declarar uma lista de permissões, onde a lista é usada para determinar o status de processamento de cada permissão
    String[] permissions = new String[]{Manifest.permission.RECORD_AUDIO,
            Manifest.permission.READ_EXTERNAL_STORAGE};
    List<String> mPermissionList = new ArrayList<>();
    
    • Julgar o status de autorização de cada autoridade e adicioná-lo à lista de aplicativos sem consentimento e, em seguida, solicitar autoridade
    private void myRequestPermission() {
        mPermissionList.clear();
        //逐个判断权限是否已经通过
        for (int i = 0; i < permissions.length; i++) {
            if (ContextCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {            
                //如果未授权,则添加到列表中
                mPermissionList.add(permissions[i]);
            }
        }

        //申请权限,如果列表不为空,说明有权限需要申请
        if (mPermissionList.size() > 0) {
            //有权限没有通过,需要申请
            ActivityCompat.requestPermissions(this, permissionsList.toArray(new String[permissionsList.size()]), 1);
        }else{
            //已有权限,做进一步操作
    }
    }
  • Substituir o método de solicitar retorno de chamada de permissão para processamento subsequente
 @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode){
            case 1:
                int resultLength = grantResults.length;
                //说明回调成功了,权限授权被允许
                if(resultLength > 0){
                    for(int grantCode : grantResults){
                        if(grantCode == PackageManager.PERMISSION_GRANTED){
                            Toast.makeText(this, "授权成功", Toast.LENGTH_SHORT).show();
                        }else{
                            Toast.makeText(this, "授权失败", Toast.LENGTH_SHORT).show();
                        }
                    }
                }
                break;
                default:
                    break;
        }
    }

4. Resumo

Após entender as permissões do Android, pode-se observar que o processo de solicitação de permissões não é muito complicado, as permissões comuns são relativamente simples, precisam ser declaradas no AndroidManifest.xml, as permissões perigosas não precisam ser declaradas no AndroidManifest.xml, mas também devem ser aplicadas dinamicamente no código , O primeiro é checkSelfPermission()verificar se uma permissão perigosa está autorizada, se não autorizada, requestPermissions()solicitar autorização, lembre-se de que isso é processamento assíncrono, o código não bloqueará a espera do usuário para autorizar a posição, o próximo passo é lidar com a situação de autorização, o retorno de chamada do sistema onRequestPermissionsResultnos informa sobre como lidar Como resultado, processamos mais com base nesse resultado. A solicitação de várias permissões ao mesmo tempo é um pouco mais complicada e precisa lidar com o processamento de cada permissão.

Publicado 19 artigos originais · elogiado 6 · visitas 6432

Acho que você gosta

Origin blog.csdn.net/lansoul1987/article/details/105602076
Recomendado
Clasificación