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

Problemas com ActivityCompat.checonckSelfPermission

Olá!

Bom, estou tendo problemas para testar a permissões. Aparentemente é um problema de versão. No código não esta reconhecendo ActivityCompat.checonckSelfPermission, Package.PERMISSION_GRANTED e ActivityCompat.requestPermissions.

Atualizei o build-tools para a versão 23.0.2 e alterei o build.gradle para:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "br.com.alura.agendaalura"
        minSdkVersion 14
        targetSdkVersion 22
        versionCode 1
        versionName "2.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.1.1'
}

Meu código esta assim:

package br.com.alura.agendaalura;

import android.content.Intent;
import android.net.Uri;
import android.provider.Browser;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import java.io.Serializable;
import java.util.List;
import java.util.jar.Manifest;

import br.com.alura.agendaalura.dao.AlunoDAO;
import br.com.alura.agendaalura.modelo.Aluno;

import static android.content.Intent.ACTION_CALL;



public class ListaAlunosActivity extends AppCompatActivity {

    private ListView listaAlunos;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lista_alunos);

        listaAlunos = (ListView) findViewById(R.id.lista_alunos);

        listaAlunos.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> lista, View item, int position, long id) {
                Aluno aluno = (Aluno) listaAlunos.getItemAtPosition(position);
                Intent intentVaiProFormulario = new Intent(ListaAlunosActivity.this, FormularioActivity.class);
                intentVaiProFormulario.putExtra("aluno", (Serializable) aluno);
                startActivity(intentVaiProFormulario);
            }
        });

        Button novoAluno = (Button) findViewById(R.id.lista_alunos_novo_aluno);
        novoAluno.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intentVaiProFormulario = new Intent(ListaAlunosActivity.this,FormularioActivity.class);
                startActivity(intentVaiProFormulario);

            }
        });

        registerForContextMenu(listaAlunos);
    }

insira seu código aqui

    private void carregaLista() {
        AlunoDAO dao = new AlunoDAO(this);
        List<Aluno> alunos = dao.buscaAlunos();
        dao.close();

        ArrayAdapter<Aluno> adapter = new ArrayAdapter<Aluno>(this, android.R.layout.simple_expandable_list_item_1, alunos);
        listaAlunos.setAdapter(adapter);
    }

    @Override
    protected void onResume() {
        super.onResume();
        carregaLista();
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, final ContextMenu.ContextMenuInfo menuInfo) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
        final Aluno aluno = (Aluno) listaAlunos.getItemAtPosition(info.position);

        MenuItem itemLigar = menu.add("Ligar");
        itemLigar.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                if (ActivityCompat.checonckSelfPermission(ListaAlunosActivity.this, android.Manifest.permission.CALL_PHONE)
                        != Package.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(ListaAlunosActivity.this, new String[]{android.Manifest.permission.CALL_PHONE},123)
                } else {

                    Intent intentLigar = new Intent(ACTION_CALL);
                    intentLigar.setData(Uri.parse("tel:" + aluno.getTelefone()));
                    startActivity(intentLigar);
                }


                return false;
            }
        });

        MenuItem itemSMS = menu.add("Enviar SMS");
        Intent intentSMS = new Intent(Intent.ACTION_VIEW);
        intentSMS.setData(Uri.parse("sms:" + aluno.getTelefone()));
        itemSMS.setIntent(intentSMS);

        MenuItem itemMapa = menu.add("Visualizar no mapa");
        Intent intentMapa = new Intent(Intent.ACTION_VIEW);
        intentMapa.setData(Uri.parse("geo: " + aluno.getEndereco()));
        itemMapa.setIntent(intentMapa);

        MenuItem itemSite = menu.add("Visitar site");
        Intent intentSite = new Intent(Intent.ACTION_VIEW);

        String site = aluno.getSite();
        if (!site.startsWith("http://")) {
            site = "http://" + site ;
        }

        intentSite.setData(Uri.parse(site));

        MenuItem deletar = menu.add("Deletar");
        deletar.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {

                AlunoDAO dao = new AlunoDAO(ListaAlunosActivity.this);
                dao.deleta(aluno);
                dao.close();

                carregaLista();
                //Toast.makeText(ListaAlunosActivity.this,"Deletar o aluno "+aluno,Toast.LENGTH_SHORT.show);
                return false;
            }
        });
    }


}

O que pode ter acontecido?

Obrigada!

11 respostas

Oi Christianne. Percebi um erro de digitação no seu código:

ActivityCompat.checonckSelfPermission

O certo seria:

ActivityCompat.checkSelfPermission

DICA: Use o atalho CTRL+SPACE sempre que quiser invocar um método ou chamar uma variável.

Oi Christianne, tudo bem ?

Algo importante para você avaliar, seu emulador está com android 6 ou superior ?

Outra coisa que pode estar rolando é a versão que você tá falando que é o alvo do aplicativo :

targetSdkVersion 22

Talvez fosse interessante colocar na 23 também.

Faz esses testes e fala para gente o que deu

Abraços

Robert, não era a sintaxe não.

De qualquer forma, obrigado.

Oi Mateus,

Tô com a versão 6 e também já alterei o targetSdkVersion para 23 mas não rolou.

Veja lá na minha configuração do gradle onde tem dependencies, acho que tá errado lá mas não sei o que deveria ser.

Obrigado.

O que o Robert falou tem sentido sim, acredito que você tenha digitado errado :(

Acabei passando despercebido por ali :

ActivityCompat.checkSelfPermission

Conforme a gente consegue olhar aqui na documentação : https://developers.google.com/android/guides/permissions

Mateus e Robert,

Não é a sintaxe não. Corrigi e o problema persiste. Também não reconhece o trecho Package.PERMISSION_GRANTED e o Activity.requestPermissions.

Você tá fazendo o import do lugar incorreto :(

import java.util.jar.Manifest;

Deveria ser do android, apaga essa linha e dá um control enter na referencia que vai te dar a opção de importar a correta.

Matheus, esse import tava errado mesmo. Corrigi mas ainda continuo com os demais erros que havia reportado.

Me mostra como sua classe está agora ?

solução!

Matheus, acho que buguei minha instalação aqui. Vou deixar operacional e se a dúvida ainda persistir reabro, ok?

Obrigada.

Perfeito

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