Как скачать файлы на SD карту с ftp без рута

Простой вопрос, но я нигде не мог найти ответ (все ответы требуют рутирования на Android Marshmallow, потому что ftp-клиенты не включают разрешение на запись на SD-карту). У меня есть огромный файл, который слишком велик для загрузки во внутреннюю память. Поэтому его можно загрузить только на SD-карту напрямую. Также кажется, что никакие внутренние приложения не имеют разрешения на запись на SD-карту, поэтому я не могу напрямую использовать инструменты командной строки.

Поскольку файл огромен, мне также нужно иметь возможность приостанавливать и возобновлять загрузку.

@IrfanLatif, в моем случае файл больше внутренней памяти.
Да. Вот почему вы можете напрямую загружать на внешнюю SD-карту в частный каталог (внутренний Android/data/каталог) загружаемого приложения. Вы можете использовать любое приложение с графическим интерфейсом клиента FTP или утилиту CLI. Если приложение использует SAF API, возможна запись на SD-карту в любой каталог.

Ответы (1)

Я использую синхронизацию папок.
Но это зависит от вашей версии Android. Если у вас 5.1 или выше, разработчики приложений должны включить Environment.getExternalStorage.....

ПРИМЕР ИСПОЛЬЗОВАНИЯ ФАЙЛА

File file = new File(Environment.getExternalStorageDirectory(), "myfile.txt"); 

вместо старого жестко закодированного способа.

File file = new File("SDCard", "myfile.txt"); 

Для получения дополнительной информации о возобновлении паузы с FTP я включил ссылку на вопрос разработки, касающийся возобновления паузы на клиентах Android.

Синхронизация папок бесплатно

Разработка FTP-клиента с Pause Resume на Android

Для эмулятора терминала вы должны запустить

getprop vold.path.external_sd

затем попробуйте запустить внешний каталог как возвращенный

НЕТ

sdcard/download/txt.txt

СКОРЕЕ

storage/sdcard0/download/txt.txt

Обычно это только один каталог / устаревший каталог больше не доступен. поэтому вам нужно получить фактический путь с помощью некоторой команды...

getprop  

getprop вернет все текущие системные свойства, включая пути к хранилищу и результаты состояния сети.

Поэтому мне нужно использовать root для вашего приложения. но я жду для этого функцию Android 7.
Вам никогда не понадобится root-доступ для доступа к SD-карте, если приложение не использует старый жестко закодированный путь к SD-карте .... Я знаю, что вы можете выбрать папку, затем нажмите «Показать SD-карту», ​​затем выберите папку на SD Карта для сохранения... Она не должна называться SD-картой, но что-то вроде E4-534/download/path вместо SDCard/download/path.... Для этого не требуется root-доступ, просто правильное кодирование
Кажется, он не поддерживает приостановку и возобновление загрузки. У меня только неполный рабочий день доступ в Интернет.
Хорошо, насколько большой файл? .. Я не уверен в возможности возобновления паузы на большинстве FTP-серверов из-за низкой безопасности при отправке необработанных данных, имени пользователя, пароле и т. д.
Вы можете приостановить и возобновить в любое время с помощью wget или aria2 на ftp-серверах (соединение закрывается, и при повторном открытии загрузка начинается со смещением) . Он имеет размер 30 байт, но в виде файла xml его размер может быть уменьшен перед загрузкой.
Это может быть проблема клиента с приложениями для Android... вот ссылка, которую я прочитал stackoverflow.com/questions/32536854/…
wget и aria2c — это команды Linux, для которых требуется эмулятор терминала на Android. Я не видел эмулятора терминала, позволяющего записывать на SD-карту.
На самом деле это было бы довольно просто сделать по предыдущей ссылке, но у меня это заняло бы полдня!
Команды терминала можно запускать с процессом и входным потоком, тогда вы можете вытащить зашифрованное имя каталога SD-карты E4-686/, а затем запустить строковую команду, объединяющую каталог с командой, которая будет запускаться через процесс, затем захватить входной поток и вернуть его обратно пользователю!
что ??? ??? ???