34

tengo una aplicación que permite tomar fotos y moverlas a una carpeta personalizada. Todo funciona bien pero no puedo obtener acceso a la memoria externa SD para crear la carpeta personalizada y mover las fotos a la SD, es necesario ya que los dispositivos que utilizo tienen poca memoria interna.

Agrege los permisos necesarios

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

Uso RNFS para crear la carpeta

const RNFS = require('react-native-fs')
const customFolder = `${RNFS.ExternalStorageDirectoryPath}/customName`
RNFS.mkdir(customFolder).then(() => console.log('Directories created')).catch(err => console.log(err))

Tambien he tratado de utilizar la otra ruta que tiene RNFS "ExternalDirectoryPath" pero no consigo acceder a la SD. ¿Es posible guardar o mover estas carpetas y fotografias en la SD con react native?

HubertRonald
  • 3,079
  • 1
  • 8
  • 26
Edwin V
  • 1,151
  • 1
  • 15
  • 31
  • 2
    ¿La aplicación es solamente para Android? – fredyfx Mar 12 '19 at 22:00
  • Si, la aplicación solo es para android – Edwin V Mar 12 '19 at 22:03
  • 12
    Siento decir @Edwin V que es la **novedad #420** del 17 de enero de 2018 *[Cannot write to SD card outside of app dir](https://github.com/itinance/react-native-fs/issues/420)* reportada por la comunidad de **react-native-fs** y que a la fecha se encuentra en espera de ser resuelta. Los usuarios han manifestado que necesitan acceder a la **tarjeta SD** para trabajar con la aplicación en modo offline o para fines similares. Hay un pequeño script inclusive posteado que muestra la novedad antes citada, empleando el método `RNFS.mkdir(directory)` que también se lee en vuestra pregunta. – HubertRonald Mar 12 '19 at 22:34
  • 1
    nunca he tenido la oportunidad de usar rnfs, pero estoy viendo que existe una funcion para obtener los directorios https://github.com/itinance/react-native-fs#android-only-getallexternalfilesdirs-promisestring , revisa los que te muestra, y busca el de la ruta que necesitas (en este caso la sdcard) y al guardar el archivos deberias utilizar dicha ruta... – skewed Mar 06 '19 at 19:12

1 Answers1

1

El acceso a la tarjeta SD ha cambiado a lo largo del tiempo en Android. Actualmente no existe una unica manera que funcione en todos los casos, si para algunos puntuales:

  • Antes de KitKat: solo soporte para acceder a ciertas carpetas conocidas (como imagenes, videos, etc) no para crear carpetas.

  • KitKat: Se extiende acceso de escritura en la SD mediante API en carpetas creadas especificamente para cada aplicacion (/android/data/app.id/ por ejemplo).

  • Lollipop: Se agrega API para permitir acceso a escribir en carpetas de otros proveedores o aplicaciones (datos compartidos, etc).

  • Nougat: Se simplificó la API paraque se pueda acceder a carpetas especificas de la memoria externa (llamese Media, Video, etc.).

En resumen, crear una carpeta directamente en la raiz de la SD card parece no estar dentro de las opciones comunes a todas las versiones de Android mas recientes.

Puedes intentar mediante API escribir en carpetas conocidas (en algunos casos solo crear archivos en dicha carpeta pero no crear subcarpetas), o derechamente escribir en la carpeta asignada a tu aplicacion Android/data/<app-id>/ (conocida en Cordova como externalApplicationStorageDirectory)

F.Igor
  • 4,242
  • 1
  • 6
  • 15