Vamos a ver cómo saber, en tiempo de ejecución, si tenemos concedido un determinado permiso. Esto nos ayudará a que si no lo tenemos la aplicación no termine con error sino que podamos avisar al usuario. Para ello podemos usar la siguiente función:

private boolean ChekPermission(String permission){
        //Este método comprueba si el persmiso que se pasa está declarado o disponemos de el
        //Si el permiso está granted (está declarado con uses-permission) devolverá true.
        int result = this.checkCallingOrSelfPermission(permission);
        return result==PackageManager.PERMISSION_GRANTED;
}

La funcón checkCallingOrSelfPermission(permission) devuelve la constante PERMISSION_GRANTED o PERMISSION_DENIED a la que podemos también acceder desde el PackageManager.