Fazer ligação no android

tenho este código e nao funciona. nao sei se o app precisa mandar uma autenticação que é possivel fazer a ligação.

private Button ligar;

ligar = (Button) findViewById(R.id.btLigarUsuario);

// add PhoneStateListener
    PhoneCallListener phoneListener = new PhoneCallListener();
    TelephonyManager telephonyManager = (TelephonyManager) this
            .getSystemService(DetalheAlertaActivity.TELEPHONY_SERVICE);
    telephonyManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);

    ligar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(Intent.ACTION_CALL);
            intent.setData(Uri.parse("tel:" + telefone));
            if (ActivityCompat.checkSelfPermission(DetalheAlertaActivity.this, android.Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                return;
            }
            startActivity(intent);
        }
    });

permissoes do app

<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

falta alguma coisa?

Se eu não me engano, você precisa solicitar ao usuário as permissões e, assim que o usuário concordar com elas, o teu app pode executar as ações que estão sob a permissão especificada.

mas quando eu instalo pelo android studio, ele nao pergunta nada

Não, não é essa permissão, é a permissão de execução de ligação, que o app deve solicitar ao usuário.
Além de ter as permissões deifnidas no manifest, você ainda precisa solicitar ao usuário que confirme que ele está concedendo permissão ao app para executar isso ou aquilo.
É uma burocracia das novas versões do android.

@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;
        }
    }