confundido acerca de los permisos de tiempo de ejecución de Android

Así que estos nuevos permisos de tiempo de ejecución de Android me han confundido. Mi aplicación actualmente está compilando y apuntando a la versión 23, lo que significa que tengo que usar permisos de tiempo de ejecución. Mi aplicación utiliza principalmente la API de la cámara que necesita el permiso de la cámara, así que agregué los permisos de tiempo de ejecución antes de abrir la cámara como tal:

        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.CAMERA)
                != PackageManager.PERMISSION_GRANTED)
        {//ask permissions for camera
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.CAMERA},
                    CameraPermissions);
        }
        else
        {//permissions attained now you can open the camera
            camera=Camera.open(getCid());
            camera.setPreviewCallback(this);
            initPreview(width, height);
            startPreview();
            startTimer();
        }

También verifico cuando detengo la cámara:

       if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.CAMERA)
                == PackageManager.PERMISSION_GRANTED) {
            camera.setPreviewCallback(null);
            camera.release();
            faceProc.release();
            faceProc = null;
            camera = null;
            inPreview = false;
            cameraConfigured = false;
        }

La solicitud de permiso se maneja como tal:

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

                StartUpCam();
            } else {

                // permission denied, boo! Disable the
                // functionality that depends on this permission.
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setMessage("How is this app going to work if you rejected the camera permission.... DUHHHH!!")
                        .setTitle("Rejected");
                builder.setPositiveButton("Exit App", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        //close application
                        closeApp();
                    }
                });
                AlertDialog dialog = builder.create();
                dialog.show();
            }
            return;
        }
    }
}

Entonces, cuando se da la solicitud, llama a StartUpCam que luego intenta abrir la cámara si se otorgan los permisos. Entonces, aquí vienen mis preguntas, si agrego este permiso de tiempo de ejecución, ¿cómo afecta esto a los dispositivos Android inferiores a 6.0? Entonces, ¿un teléfono con la versión 5.0.1 también recibirá un aviso para otorgar permisos de cámara? Si uso permisos de tiempo de ejecución, ¿tengo que eliminar los permisos de la cámara en el archivo de manifiesto? Actualmente, mantengo los permisos de la cámara en el manifiesto junto con los permisos de tiempo de ejecución No sé si eso es correcto o no. ¿Qué sucede si bajo el objetivo y compilando SDK a 22 en lugar de 23, los dispositivos Android por encima de 6.0 no podrán descargar mi aplicación? Si lo bajo a la versión 22, entonces evito todo este dolor de cabeza ...

Respuestas a la pregunta(2)

Su respuesta a la pregunta