Cómo descargar archivos a la tarjeta SD desde ftp sin rootear

Pregunta simple, pero no pude encontrar la respuesta en ninguna parte (todas las respuestas requieren rootear Android Marshmallow porque los clientes ftp no incluyen el permiso para escribir en la tarjeta SD). Tengo un archivo enorme que es demasiado grande para descargarlo en el almacenamiento interno. Por lo tanto, solo se puede descargar directamente en la tarjeta SD. También parece que ninguna aplicación externa tiene permiso para escribir en la tarjeta SD, por lo que no puedo usar las herramientas de línea de comandos directamente.

Como el archivo es enorme, también necesito poder pausar y reanudar las descargas.

@IrfanLatif, el archivo es más grande que la memoria interna en mi caso.
Sí. Es por eso que puede descargar directamente a la tarjeta SD externa en el directorio privado ( Android/data/directorio interno) de la aplicación de descarga. Puede usar cualquier aplicación GUI de cliente FTP o utilidad CLI. Si la aplicación utiliza API SAF, es posible escribir en la tarjeta SD en cualquier directorio.

Respuestas (1)

Yo uso la sincronización de carpetas.
Pero depende de su versión de Android. Si tiene 5.1 o superior, los desarrolladores de la aplicación deben incluir Environment.getExternalStorage...

EJEMPLO DE USO DE ARCHIVOS

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

en lugar de la antigua forma codificada.

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

Para obtener más información sobre pausar reanudar con FTP, he incluido un enlace a una pregunta de desarrollo sobre pausar reanudar en clientes de Android

Sincronización de carpetas gratis

Desarrollo de un cliente FTP con pausa en el currículum en Android

Para el emulador de terminal, debe ejecutar

getprop vold.path.external_sd

luego intente ejecutar el directorio externo como se devolvió

NO

sdcard/download/txt.txt

BASTANTE

storage/sdcard0/download/txt.txt

Por lo general, solo se puede acceder a un directorio / directorio heredado. por lo que necesita obtener la ruta real con algún comando ...

getprop  

getprop devolverá todas las propiedades actuales del sistema, esto incluye las rutas de almacenamiento y los resultados del estado de la red

Así que necesito usar la raíz para su aplicación. pero estoy esperando la función de Android 7 para eso.
Nunca debería necesitar acceso a la raíz para acceder a la tarjeta SD a menos que la aplicación use una antigua ruta de tarjeta SD codificada ... Sé que puede elegir una carpeta, luego hacer clic en Mostrar tarjeta SD, luego seleccionar la carpeta en SD Tarjeta para guardar en... No debería llamarse Tarjeta SD, sino algo así como E4-534/descargar/ruta en lugar de SDCard/descarga/ruta... Esto no necesita acceso de root, solo la codificación correcta
No parece admitir la pausa y reanudación de descargas. Sólo tengo acceso a Internet a tiempo parcial.
Ok, ¿qué tan grande es el archivo? .. No estoy seguro acerca de la capacidad de reanudar la pausa en la mayoría de los servidores FTP debido a la baja seguridad con el envío de datos sin procesar, nombre de usuario, contraseña, etc.
Puede pausar y reanudar en cualquier momento con wget o aria2 en servidores ftp (la conexión se cierra y al volver a abrir la descarga comienza con un desplazamiento) . Tiene un tamaño de 30 ɢb, pero como archivo xml, su tamaño se puede reducir antes de descargarlo.
Podría ser un problema del cliente con las aplicaciones de Android... aquí está el enlace que leí stackoverflow.com/questions/32536854/…
wget y aria2c son comandos de Linux que requieren un emulador de terminal en Android. No vi ningún emulador de terminal que permitiera escribir en la tarjeta SD.
De hecho, sería bastante simple de hacer de acuerdo con el enlace anterior, ¡pero me llevaría medio día!
Los comandos de la terminal se pueden ejecutar con el proceso y el flujo de entrada, luego puede extraer el nombre del directorio encriptado de la tarjeta SD E4-686/ y luego ejecutar un comando de cadena que une el directorio con el comando para ejecutarlo a través del proceso, luego capturar el flujo de entrada y devolverlo al usuario !
qué ??? ??? ???