Несмотря на то, что тест разрешения для внешнего хранилища возвращен, FileOutputStream (newFile) .getChannel (); выдает исключение: java .io.FileNotFoundException: /storage/3766-6230/MyData/smallv.mp4 (В доступе отказано)
путь "/ storage / 3766-6230 / MyData /" существует, и я можете перемещать / копировать файлы в этот каталог, используя приложение менеджера файлов без проблем. Невозможно выяснить, чего не хватает в коде ниже. Примечание: жестко закодированные пути в коде, приведенные для упрощения, выбираются пользователем путем просмотра каталогов в приложении.
if (ActivityCompat.checkSelfPermission(v.getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
// Permission is already available, write to the file.
File filetocopy = new File("/sdcard/tmp", "test.mp4");
File newFile = new File("/storage/3766-6230/MyData", "test.mp4");
if (newFile.exists()) return -1; // file with the given name already exists
try {
inputChannel = new FileInputStream(filetocopy).getChannel();
outputChannel = new FileOutputStream(newFile).getChannel(); // This throws exception
copyFile(inputChannel, outputChannel );
} catch (Exception e) {
Log.e(LOGTAG,"I/O Error: "+e.getMessage());
retv = -2; // error
}
} else {
// Permission is missing and must be requested.
requestWriteExternalStoragePermission();
}