Bueno, esta vez he encotrada una solucion que me funciona, consiste en escribir el archivo a una ubicación privada para luego desde alli copiarlo mediante el uso de MediaStore a la carpeta compartida
public Boolean copyFileD(File forg) {
Boolean ok = false;
InputStream is = null;
OutputStream os = null;
Uri target;
Uri uri;
String filename = forg.getName();
ContentResolver cr = nContexto.getContentResolver();
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS + File.separator + filename);
values.put(MediaStore.MediaColumns.IS_PENDING, true);
values.put(MediaStore.MediaColumns.DISPLAY_NAME, filename);
if (Build.VERSION.SDK_INT >= 29) {
target = MediaStore.Downloads.EXTERNAL_CONTENT_URI;
} else {
target = MediaStore.Files.getContentUri("external");
}
uri = cr.insert(target, values);
if (uri == null) {
ok = false;
} else ok = true;
if (ok) {
try {
is = new FileInputStream(forg);
os = cr.openOutputStream(uri, "rw");
} catch (FileNotFoundException e) {
e.printStackTrace();
ok = false;
}
byte[] b = new byte[8192];
try {
for (int r; (r = is.read(b)) != -1; ) {
try {
os.write(b, 0, r);
} catch (IOException e) {
e.printStackTrace();
ok = false;
}
}
os.flush();
os.close();
is.close();
} catch (Throwable tr) {
tr.printStackTrace();
ok = false;
}
if (Build.VERSION.SDK_INT >= 29) {
values = new ContentValues();
values.put(MediaStore.Images.ImageColumns.IS_PENDING, false);
cr.update(uri, values, null, null);
}
}
return ok;
}
Es increible la cantidad de código necesaria para copiar un simple archivo !!