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

Menu "Ligar" não chama aplicação de fone

Boa tarde Pessoal, não está fazendo a ligação, na verdade nem abre a tela de discando o número de telefone, segue o código:

//CALL PHONE
        MenuItem itemLigar = menu.add("Ligar");

        //ouvindo para pedir permissão
        itemLigar.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {
                if(ActivityCompat.checkSelfPermission(ListaAlunosActivity.this,Manifest.permission.CALL_PHONE)
                        != PackageManager.PERMISSION_GRANTED){
                    ActivityCompat.requestPermissions(ListaAlunosActivity.this,
                            new String[]{Manifest.permission.CALL_PHONE},123);
                }else{
                    Intent intentLigar = new Intent(Intent.ACTION_CALL);
                    intentLigar.setData(Uri.parse("tel:" + aluno.getTelefone()));
                    startActivity(intentLigar);
                }

                return false;
            }
        });

O que será que pode ser? está igual do professor

15 respostas

Minha build.app

apply plugin: 'com.android.application'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "br.com.teste.agenda"
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

Estou usando Android Studio versão 3.2.1

Bruno

Posta o método onRequestPermissionsResult(), ou a classe inteira, fica mais fácil pra identificar o problema

Esse é o código completo, está no gist porque o código é grande

https://gist.github.com/azumamagus/7c44ba78bad8a45a66f5fad9b3055796

Dei uma olhada no código e a solicitação de permissão esta ok Lembro que o Jeferson demonstra o uso do método onRequestPermissionsResult() para verificar se o usuário permitiu ou não o uso do recurso (mas que não utilizou durante a aula)

Seguindo oque esta no código toda ligação que você tentar fazer, será verificada a permissão e

Caso o usuário já tenha dado a permissão, a "tela de ligação" será chamada.

Caso o usuário ainda não tenha dado a permissão, ou tenha negado/removido, a permissão será solicitada.

Oque esta acontecendo é , como você não sobrescreveu o método onRequestPermissionsResult(), após o usuário permitir o uso do recurso, nada vai acontecer, pois no momento não existe uma ação definida para isto.

Solução 1

Você pode tentar fazer a ligação, mais uma vez após ter dado a permissão (isto vai funciona durante a aula)

Solução 2

Você pode sobrescrever o método onRequestPermissionsResult() da seguinte forma:

 @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case 123:
                if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
                    if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        Intent intentLigar = new Intent(Intent.ACTION_CALL);
                        intentLigar.setData(Uri.parse("tel:" + aluno.getTelefone()));
                        startActivity(intentLigar);
                    }
                } else {
                    Toast.makeText(ListaAlunosActivity.this,
                            "A permissão é necessária",
                            Toast.LENGTH_LONG).show();
                }
                break;
        }
    }

Após isto, você vai precisar criar uma variável membro para ter acesso ao aluno dentro do método onRequestPermissionsResult, neste caso chamei a variável de aluno

public class ListaAlunosActivity extends AppCompatActivity {

    private ListView listaAlunos;
    private Aluno aluno;

// Restante da classe
}

E precisa atribuir o usuário selecionado a esta variável membro

Como você deve fazer:

 @Override
    public void onCreateContextMenu(ContextMenu menu, View v, final ContextMenu.ContextMenuInfo menuInfo) {

        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
        aluno = (Aluno) listaAlunos.getItemAtPosition(info.position);

//Restante do método que você já tem
    }

Esta é uma forma de resolver seu problema, e só estou te explicando para conhecimento. Seguindo os cursos, você vai aprender com mais detalhes como funciona a solicitação de permissões no android.

Espero ter conseguido te ajudar

Não da dando certo, tento colocar o codigo de sobrescrever o ele fala pede para remover o @Override, se remove pede para criar o metodo onRequestPermissionsResult

http://prntscr.com/m510uu

Eu entrei no seu repositório no GitHub, e as duas soluções funcionaram aqui.

Segue a classe ListaAlunosActivity no GitHubgist

Puts a classe ta igual e ainda não faz nada, no LogCat: verbose aparece isso

   --------- beginning of system
2019-01-11 11:12:38.557 1756-2246/system_process I/ActivityManager: START u0 {act=android.intent.action.CALL dat=tel:xxxx-xxxx cmp=com.android.server.telecom/.components.UserCallActivity} from uid 10084 on display 0
2019-01-11 11:12:38.565 1381-1413/? W/audio_hw_generic: Not supplying enough data to HAL, expected position 1856502 , only wrote 1856160
2019-01-11 11:12:38.596 1756-1756/system_process I/Telecom: CallIntentProcessor: onReceive - isUnknownCall: false: PCR.oR@AG0
2019-01-11 11:12:38.605 1756-1756/system_process I/Telecom: Event: Call TC@3: CREATED, null: PCR.oR@AG0
2019-01-11 11:12:38.606 1756-1756/system_process I/Telecom: CallsManager: makeRoomForOutgoingCall call = [TC@3, NEW, null, tel:****-****, A, childs(0), has_parent(false), [Capabilities:], [Properties:]] livecall = [TC@2, ACTIVE, com.android.phone/com.android.services.telephony.TelephonyConnectionService, tel:********, A, childs(0), has_parent(false), [Capabilities: CAPABILITY_HOLD CAPABILITY_SUPPORT_HOLD CAPABILITY_MUTE CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO], [Properties:]]: PCR.oR@AG0
2019-01-11 11:12:38.607 1756-1756/system_process I/Telecom: CallsManager: No remaining room for outgoing call: [TC@3, NEW, null, tel:****-****, A, childs(0), has_parent(false), [Capabilities:], [Properties:]]: PCR.oR@AG0
2019-01-11 11:12:38.615 1756-3662/system_process W/InputMethodManagerService: Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@5084414 attribute=null, token = android.os.BinderProxy@4b9cda
2019-01-11 11:12:38.616 1756-1756/system_process I/Telecom: TelecomSystem: CallerInfoAsyncQuery.startQuery number=[0d64a78ee6524d9c249418b1c5f64bdede7ef5b6] cookie=PCR.oR->CILH.sL@AG0_0_0: PCR.oR->CILH.sL@AG0_0
2019-01-11 11:12:38.647 1756-1756/system_process I/Telecom: CallerInfoLookupHelper: CI query for handle tel:****-**** has completed; notifying all listeners.: PCR.oR->CILH.sL->CILH.oQC@AG0_0_0
2019-01-11 11:12:38.647 1756-1756/system_process I/Telecom: Call: CallerInfo received for tel:****-****: com.android.internal.telephony.CallerInfo@4bb44bd { name null, phoneNumber non-null }: PCR.oR->CILH.sL->CILH.oQC@AG0_0_0
2019-01-11 11:12:38.648 1756-1756/system_process I/Telecom: CallerInfoLookupHelper: There is no photo for this contact, skipping photo query: PCR.oR->CILH.sL->CILH.oQC@AG0_0_0
2019-01-11 11:12:38.651 5062-5088/br.com.teste.agenda D/EGL_emulation: eglMakeCurrent: 0xa31e3080: ver 2 0 (tinfo 0xa31d1870)
2019-01-11 11:12:38.664 5062-5088/br.com.teste.agenda D/EGL_emulation: eglMakeCurrent: 0xa31e3080: ver 2 0 (tinfo 0xa31d1870)
2019-01-11 11:12:38.889 5062-5088/br.com.teste.agenda D/EGL_emulation: eglMakeCurrent: 0xa31e3080: ver 2 0 (tinfo 0xa31d1870)
2019-01-11 11:12:38.893 5062-5088/br.com.teste.agenda D/OpenGLRenderer: endAllActiveAnimators on 0x93278300 (MenuPopupWindow$MenuDropDownListView) with handle 0x93f62f50
2019-01-11 11:12:41.777 1381-1414/? W/audio_hw_generic: Not supplying enough data to HAL, expected position 2162343 , only wrote 2010240
2019-01-11 11:12:50.478 2706-2706/com.google.android.googlequicksearchbox:search I/GrammarCompilationSvcCt: #startService for null, APP_NAMES.
2019-01-11 11:12:50.483 2706-5163/com.google.android.googlequicksearchbox:search I/ContextCompilationHandl: Compiling grammar for: en-US, type=APP_NAMES
2019-01-11 11:12:50.486 2706-5163/com.google.android.googlequicksearchbox:search I/ContextCompilationHandl: No grammar compilation resources for VOICE_ACTIONS_COMPILER, aborting. 
2019-01-11 11:13:00.017 1756-1756/system_process I/ActivityManager: Killing 4370:com.google.android.gm/u0a68 (adj 906): empty #17

Classe Atual - ListaAlunosActivity

Bruno, eu olhei a classe que me mandou, e ela esta diferente da que eu te mandei

Eu entrei no seu github, clonei seu projeto, e as duas soluções que mandei funcionaram com base no seu código.

A Solução 1, você não precisa alterar nada de código, só necessita tentar fazer a ligação duas vezes (da mesma forma que o Jeferson fez durante a aula ), ou dar a permissão manualmente (Ele também fez isto durante o curso para outras permissões).

Na Solução 2, dentre outras pequenas alterações, sobrescrevo o método onRequestPermissionsResult. Como a classe que te mandei foi totalmente baseada no seu código, você poderia até copiar e colar ela inteira.

Tente rodar o app em outro emulador, ou celular. Caso isto não funcione, provavelmente você deve estar com um problema que não envolve código, pois não vejo indicações de erro no log que mandou ou na sua aplicação baixada em https://github.com/azumamagus/Agenda

Alessandro, substitui o codigo conforme falou e não deu certo, ai tentei usar os emuladores diferentes e também não rolou.

Emularores usados

Emulador que eu estava usando Nexus 5X API 25 (Android .1.1, API 25)

vídeo reproduzindo http://recordit.co/bb1mlxQKnK

Emulador alternativo Nexus 5X API 23 (Android 6.0, API23) vídeo reproduzindo http://recordit.co/d86ze4FjtF

O Github está atualizado, talvez vc pegou uma versão antiga que estava funcionando....

Qual modelo do emulador que vc está usando ai? Vou testar o mesmo que o seu para ver

Clonei seu projeto hoje, um pouco antes de te responder (vi que tinha atualizado seu repositório, por isto refiz o teste kkk), e aqui funcionou rodando no meu celular, Motorola Moto Z3 Play (Andrdoid 8.1.0, API27).

O erro que esta tento na API 23, é porque você colocou o arquivo fundo_camera.xml, na pasta drawable-v24. Coloque também este arquivo na pasta drawable, que vai funcionar.

Você poderia clonar este projeto AgendaAzumamagus e rodar nos seus emuladores/celular.

Ola, tudo bom Bruno, conseguiu resolver seu problema?

Se sim, poste a solução, vai ajudar outras pessoas com o mesmo problema

Fala Alessandro blz?

Fiz a alteração da fundo_camera.xml que sugeriu, meu projeto esta assim atualmente:

ProjetoAgenda

Tentei rodar o projeto que você clonou, e não rodou, apresentou esse erro: http://prntscr.com/m7yixs

Estranho, mas a chamada telefônico ainda não funciona

Você precisa desinstalar o aplicativo manualmente do seu dispositivo (emulador ou celular), e depois instalar rodar pelo android studio.

Também é importante ir em, Build/Clean Project

Isto deve resolver este problema

solução!

Estava digitando agora para postar a solução Alessandro kkkkkkk

Desinstalei o APP e e instalei novamente e funcionou!!

Fechou!!

Valeu

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