Obtenga la ruta real desde el URI del archivo en sdcard marshmallow

Quiero elegir el archivo que existe en sdcardno en almacenamiento interno y subirlo al servidor pero no puedo obtener su ruta para obtener su tamaño. He comenzado una intención para elegir un archivo usando el siguiente código:

 intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
 intent.addCategory(Intent.CATEGORY_OPENABLE);
 intent.setType("*/*");
 String[] mimetypes = {"application/*"};
 intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
 startActivityForResult(
      Intent.createChooser(intent, "Select a File to Upload"), FILE_SELECT_CODE);

Para obtener la ruta al archivo que estoy usandoesta respuesta y funciona a menos que el usuario seleccione algún archivo de sdcard (extraíble). Cuando depuro el código y descubro quetipo no esprimario entonces no entrará en esta condición:

if("primary".equalsIgnoreCase(type)){
     return Environment.getExternalStorageDirectory() + "/" + split[1];
} 

Entonces mi pregunta es: ¿qué será? es decir, ¿qué pasa si el tipo no es primario? ¿Cómo podemos obtener la ruta al archivo en ese caso? He buscado muchas preguntas y tutoriales, no hay más en ninguno de ellos. También he intentado otra parte deesta respuesta pero no funciona porqueSystem.getenv() regresonulo para "ALMACENAMIENTO SECUNDARIO"ytarjeta SD para "ALMACENAMIENTO EXTERNO". Recibo una excepción de archivo no encontrado cuando intento:

if ("primary".equalsIgnoreCase(type)) {
    return Environment.getExternalStorageDirectory() + "/" + split[1];
}else{
    return System.getenv("EXTERNAL_STORAGE") + "/" + split[1];
}

La identificación de Uri y doc para el archivo se ve así:

Uri: contenido: //com.android.externalstorage.documents/document/0EF9-3110%3Adevice-2016-12-02-130553.png

docId: 0EF9-3110: dispositivo-2016-12-02-130553.png

Alguna ayuda ??

Respuestas a la pregunta(3)

Su respuesta a la pregunta