Saltar al contenido

Permiso revocado android.permission.CALL_PHONE

Solución:

El permiso CALL_PHONE pertenece a un grupo de permisos peligroso.
Por lo tanto, si el SDK de destino de sus aplicaciones es 23 o superior y su dispositivo se ejecuta en Android 6.0 o superior, debe solicitar el permiso CALL_PHONE mientras la aplicación se está ejecutando.

Ejemplo :

String number = ("tel:" + numTxt.getText());
mIntent = new Intent(Intent.ACTION_CALL);
mIntent.setData(Uri.parse(number));
// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
            Manifest.permission.CALL_PHONE)
    != PackageManager.PERMISSION_GRANTED) {

    ActivityCompat.requestPermissions(thisActivity,
            new String[]{Manifest.permission.CALL_PHONE},
            MY_PERMISSIONS_REQUEST_CALL_PHONE);

    // MY_PERMISSIONS_REQUEST_CALL_PHONE is an
    // app-defined int constant. The callback method gets the
    // result of the request.
} else {
    //You already have permission
     try {
        startActivity(mIntent); 
    } catch(SecurityException e) {
       e.printStackTrace();
   }
}

Cuando su aplicación solicita permisos, el sistema presenta un cuadro de diálogo al usuario. Cuando el usuario responde, el sistema invoca el método onRequestPermissionsResult () de tu aplicación y le pasa la respuesta del usuario.

@Override
public void onRequestPermissionsResult(int requestCode,
    String permissions[], int[] grantResults) {
  switch (requestCode) {
    case MY_PERMISSIONS_REQUEST_CALL_PHONE: {
        // If request is cancelled, the result arrays are empty.
        if (grantResults.length > 0
            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

            // permission was granted, yay! Do the phone call

        } else {

            // permission denied, boo! Disable the
            // functionality that depends on this permission.
        }
        return;
    }

    // other 'case' lines to check for other
    // permissions this app might request
  }
}

En Android 6.0 (Api lvl 23) tenemos algo llamado “Permisos en tiempo de ejecución”. Tienes que leer sobre eso.

Puede encontrar documentación aquí.

Tu código podría funcionar solo si haces un ACTION_DIAL, no un ACTION_CALL donde necesita solicitar un permiso, por lo que si desea realizar una llamada, siga este ejemplo:

MANIFIESTO:

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

Código:

import static android.Manifest.permission.CALL_PHONE;

Intent i = new Intent(Intent.ACTION_CALL);
i.setData(Uri.parse("tel:0612312312"));
/*
Intent i = new Intent(Intent.ACTION_DIAL);
i.setData(Uri.parse("tel:0612312312"));
if (i.resolveActivity(getPackageManager()) != null) {
      startActivity(i);
}*/
if (ContextCompat.checkSelfPermission(getApplicationContext(), CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
      startActivity(i);
} else {
      requestPermissions(new String[]{CALL_PHONE}, 1);
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *