Stackoverflow
И большое спасибо за чтение этого вопроса.
В настоящее время я пытаюсь получить определенный каталог целиком с моего Linux сервера на
My android телефон через sftp.
Пока мой код работал нормально.
Однако, как только я собрал свое приложение в виде Signed APK и установил его, приведенный ниже код не работает должным образом.
Он не загружает файл с моего Linux сервера, но создает файлы размером 0B.
private void recursiveFolderDownload(String src, DocumentFile pickedDir) throws SftpException, InterruptedException {
Vector<ChannelSftp.LsEntry> fileAndFolderList = channelSftp.ls(src);
for (ChannelSftp.LsEntry item : fileAndFolderList) {
if (!item.getAttrs().isDir()) {
DocumentFile newFile = pickedDir.findFile(item.getFilename());
if(newFile==null){
MainActivity.changeLoadingMessage("Fetching "+item.getFilename());
restoreStatus = "Fetching "+item.getFilename();
newFile = pickedDir.createFile("",item.getFilename());
restoringFiles.add(getPathFromUri(newFile.getUri()));
write(src + "/" + item.getFilename(),newFile.getUri());
}
else{
MainActivity.changeLoadingMessage("Skipping "+item.getFilename());
restoreStatus = "Skipping "+item.getFilename();
}
} else if (!(".".equals(item.getFilename()) || "..".equals(item.getFilename()))) {
DocumentFile newDir = pickedDir.findFile(item.getFilename());
if(newDir==null){
newDir = pickedDir.createDirectory(item.getFilename());
}
recursiveFolderDownload(src + "/" + item.getFilename(), newDir);
}
}
}
private void write(String src, Uri uri) throws InterruptedException {
try {
ParcelFileDescriptor descriptor = context.getContentResolver().openFileDescriptor(uri,"w");
if(descriptor!=null) {
FileOutputStream fos=new FileOutputStream(descriptor.getFileDescriptor());
channelSftp.get(src,fos);
fos.close();
}
} catch (IOException | SftpException e) {
e.printStackTrace();
}
}
Конечно, я реализовал Storage Access Framework, используя действия с Intent.ACTION_OPEN_DOCUMENT_TREE
Странно, что этот код работает как не выпущенный APK, но не как релизный APK.
В любом случае. Большое спасибо за чтение этого вопроса.
Надеюсь, я смог найти ответ.