<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
сразу советую . Ищите решение не требующее этого (MANAGE_EXTERNAL_STORAGE") разрешения.
Только на прошлой неделе ругался с модерацией из-за reject по этой причине.
Лучше сохраните в галерею.
mContext.getContentResolver().insert(Images.Media.EXTERNAL_CONTENT_URI, values);
В этом случае пермишен нужен только для младших версий
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="29" />
11 и 12 разрешат сохранить молча. Ниже придется просить сперва пермишен.
И еще раз подумайте почему нельзя сохранять в папке самого приложения ?
Вы потом их другим программам должны дать ?
Если для целей кеширования, то у меня вот так сделано
static public @Nullable
Uri cacheUri(Uri uri, Context context) throws IOException {
InputStream inputStream = context.getContentResolver().openInputStream(uri);
if (inputStream != null) {
java.io.File outputDir = Objects.requireNonNull(context).getCacheDir(); // context being the Activity pointer
java.io.File outputFile = java.io.File.createTempFile("spool_job_", "",outputDir);
BufferedInputStream input = new BufferedInputStream(inputStream);
BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(outputFile));
// read and write into the cache directory
byte[] bArr = new byte[8192];
while (true) {
int read = input.read(bArr);
if (read < 0) {
break;
} else {
output.write(bArr, 0, read);
}
}
// close the streams
input.close();
output.close();
return Uri.fromFile(outputFile);
}
return null;
}