Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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