Gestionar permisos para SDK previos al API23 (Android 6.0 Marshmallow)

En esta entrada vamos a ver cómo en las versiones anteriores a la 6.0 (API23) tenemos que preguntar por los permisos de una aplicación de manera correcta.Haremos uso de la función IsOlderPermissionVersion() que vimos en ¿Qué versión del SDK está ejecutando mi app? para determinar si estamos o no en una versión anterior a la indicada.

También haremos uso de la función CheckPermission() que vimos en ¿Tengo permiso en tiempo de ejecución? para determinar si se tiene o no el permiso concedido.

En las versiones previas a la 6.0 los permisos se concedian al aceptar la instalación de la aplicación. La aplicación preguntaba si querías aceptar el permiso y si decías que no, pues simplemente no se instalaba.

No obstante lo correcto sería preguntar si el permiso se ha concedido (en este caso porque está puesto en el Manifest), ya que si no estuviera la aplicación terminaría con error.

El código sería el siguiente, suponer que se trata del permiso CALL_PHONE para realizar una llamada de teléfono.

private void DoPhoneCall() {
        //Intentamos hacer la llamada verificando la versión y los permisos.
        String phoneNumber = this.etPhone.getText().toString();
        Intent intentCall = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phoneNumber));
        if (IsOlderPermissionVersion()) {
            //Estamos en una versión vieja
            if (ChekPermission(Manifest.permission.CALL_PHONE))
                startActivity(intentCall);
            else
                Toast.makeText(this, "You don't have permissions to run this action", Toast.LENGTH_LONG).show();

        } 
    }