Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

Comparando Strings - Andoid

Boa tarde, eu estou com um problema em meu código android, onde eu pretendia usar uma comparação de strings para poder classificar as permissões dos aplicativos instalados no aparelho. A comparação que estou fazendo não esta aparecendo no textview em que deveria aparecer. Esse é o meu código do getView.

public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if (null == view) {
            LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = layoutInflater.inflate(R.layout.conteiner_lista, null);
        }

        ApplicationInfo data = appsList.get(position);
        PackageInfo pkginfo = null;
        try {
            pkginfo = packageManager.getPackageInfo(data.packageName, PackageManager.GET_PERMISSIONS);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }

        if (null != data && pkginfo != null) {

            TextView appNome = (TextView) view.findViewById(R.id.app_nome);
            TextView appPermissao = (TextView) view.findViewById(R.id.app_permissao);
            ImageView appIcone = (ImageView) view.findViewById(R.id.app_img);

            appNome.setText(data.loadLabel(packageManager));
            appIcone.setImageDrawable(data.loadIcon(packageManager));


            String[] pedindoPermissoes = pkginfo.requestedPermissions;
            String perm_lista = "";
            String class_perm = "";
            if (pedindoPermissoes != null && pedindoPermissoes.length > 0) {
                for (String string : pedindoPermissoes) {


//O problema esta aqui  \/

                    perm_lista += string;
                    if (string.equals(PermissionInfo.PROTECTION_DANGEROUS)) {
                        class_perm = "Aplicativo com permissões perigosas";
                    } else if (string.equals(PermissionInfo.PROTECTION_NORMAL)) {
                        class_perm = "Aplicativo com permissões normais";
                    } else if (string.equals(PermissionInfo.PROTECTION_SIGNATURE)) {
                        class_perm = "Aplicativo com permissões de assinatura";
                    }
                }

            }

//deveria exibir a classificação do app aqui \/

            appPermissao.setText(class_perm);

        }
        return view;

    }


}
9 respostas

Oi Francisco, tudo bem ?

Cara, dá dando algum erro ? Se sim posta ele aqui para gente ver.

Abraço

Olá.

Cara, pra desencargo, altera o nome dessa variável "string". Coloca algo tipo "permissao".

De toda forma, pra matar isso, coloca um else no final dos elses/if, dando um texto qualquer pra essa variável. Vamos ver se esse texto aparece lá.

[]'s.

Fazendo assim ele exibiu o texto "teste" em todas as apps listadas, o problema esta nos ifs pelo jeito.

  if (pedindoPermissoes != null && pedindoPermissoes.length > 0) {
                for (String permissao : pedindoPermissoes) {

                    perm_lista += permissao;
                   if (permissao.equals(PermissionInfo.PROTECTION_DANGEROUS)) {
                        class_perm = "Aplicativo com permissões perigosas";
                    } else if (permissao.equals(PermissionInfo.PROTECTION_NORMAL)) {
                        class_perm = "Aplicativo com permissões normais";
                    } else if (permissao.equals(PermissionInfo.PROTECTION_SIGNATURE)) {
                        class_perm = "Aplicativo com permissões de assinatura";
                    }else{
                       class_perm = "teste";
                   }
                }

            }


            appPermissao.setText(class_perm);

        }
        return view;

Esses enums devem ter que ser convertidos para string para conseguir comparar nos ifs...

Como eu converto eles?

Olha esse link: http://stackoverflow.com/questions/13523859/how-to-get-the-protection-level-for-each-permission

Usa o PackageManager e chama o getPermissionInfo(). Ele retorna um objeto PermissionInfo. Aí dá pra você comparar com os enums e dar um return de acordo com a condição.

Veja aí se consegue seguir e retorne aqui.

Desculpe a demora para responder, eu tentei adaptar esse código do stackoverflow mas não consegui.

solução!

Dentro desse for:

for (String permissao : pedindoPermissoes) {

Veja se você consegue colocar isso na primeira linha:

PermissionInfo pi = getPackageManager().getPermissionInfo(permissao , PackageManager.GET_META_DATA);

Aí faz o switch (case) assim:

 switch(pi.protectionLevel) {
        case PermissionInfo.PROTECTION_NORMAL : class_perm = "Aplicativo com permissões normais"; break;
        case PermissionInfo.PROTECTION_DANGEROUS : class_perm = "Aplicativo com permissões perigosas"; break;
        case PermissionInfo.PROTECTION_SIGNATURE : class_perm = "Aplicativo com permissões de assinatura"; break;
        default : class_perm = "Nível de permissão desconhecido"; break;
        }

Funcionou! Muito obrigado pela ajuda!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software