Spanish (Solucionado)Permisos Almacenamiento en Versiones nuevas de Android

TheFalcon

Active Member
Licensed User
Longtime User
Buenas, estoy actualizando una aplicación y me estoy encontrando con varios problemas, gracias a las nuevas políticas de Android( que ilusión)
En mi aplicación, la cual genera archivos Excel y CSV , yo los guardaba en File.DirRootExternal , que ocurre, pues que al actualizar, ya no puedo acceder hay por que me da error , he de cambiar la ruta a File.DirDefaultExternal . con el respectivo coñazo, ¿hay algún modo de forzar que pueda seguir accediendo a File.DirRootExternal ?

La solución rustica sería que en cada actualización compruebe si existen archivos en File.DirRootExternal y los mueva a File.DirDefaultExternal , pero creo que habrá algún permiso que me evite eso , para el Manifest.
Muchas Gracias
 

drgottjr

Expert
Licensed User
Longtime User
no dices si se trata o no de una app para google play. si no,
simplemente no pases de sdk28 o sdk29.

en cambio, para que tu app este en google play, tendras que
tragar los nuevos normativos.

con acceso mundial a defaultexternal and rootexternal, todo el mundo
tiene acceso a archivos que no le pertenece. google viene cerrando la
puerta a tal acceso. (hace meses y meses que se nos advierte
aqui de ello...)

aunque ya no importa, no explicas el por que te hace falta acceso a direxternal.
pero a cierto nivel tus motivos podrian ayudar a sugerir soluciones. existen
maneras para compartir archivos entre apps (relacionadas o no) sin
que todos los archivos esten en direxternal.
 

TheFalcon

Active Member
Licensed User
Longtime User
Disculpa, por no especificar, ahora mismo no la tengo en google play, la uso al margen, y actualizo mediante una FTP mía. de hay el problema, que las versiones anteriores guardan los archivos excel en File.DirRootExternal , pero si se actualiza o instala la apk en un dispositivo con una versión de Android mas moderna , pues me da error, de hay la duda, de si hay modo de mediante permiso permitir que siga accediendo a File.DirRootExternal , o de lo contrario tendré que modificarla para usar dirdefault.

Las nuevas que voy haciendo directamente uso default y se acabo el probema, pero esta en concreto he de buscarle una solucion para solventar ese problemilla.
Un saludo y gracias por responderme.

Por aclarar, me da error al guardar el archivo y al ir a listarlo en un listview, de lo contrario si me deja copiar archivos a File.DirRootExternal
 

drgottjr

Expert
Licensed User
Longtime User
voy a hacer algunas pruebas, pues yo creia que una app hecha con, ej sdk28 o mas bajo, y que accedia a defaultexternal o rootexternal, seguia funcionando aunque se encontrase en un dispositivo de android 11.
ahora, si tengo razon, esto no quiere decir que la tengo cuando aparezca android 12 y mas alla. si usando un sdk inferior no funciona, no creo que haya solucion si te aferras en usar direxternal (default o root), y por lo visto, no te marchas tranquilamente:)...
tengo un dispositivo con android 11. voy a ver hasta que punto puedo guardar un archivito en DirRootExternal incrementando el sdk. se que android 11 impone su voluntad a pesar de los pesares, pero normalmente google deja abierta alguna salida de acuerdo con el sdk (si uno no busca estar en play).
 

drgottjr

Expert
Licensed User
Longtime User
no tengo problema en acceder a dirrootexternal en mi aparato pixel con android 11.
puedo crear y leer un archivo in dirrootexternal hasta sdk 28 y 29. lo veras todo en
las imagenes adjuntas.

a partir de sdk26, tienes que pedir permiso en el manifiesto. esto, me imagino, ya
lo sabias. supongo, ademas, que ya comprendias lo de "runtime permissions" donde
tienes que pedirle al usuario el permiso de accedir a recursos que ya habias mencionado
en el manifiesto.

bien, esto sigue tranquilamente hasta sdk29 cuando en lugar de anadir el permiso en el
manifiesto, pides acceso "legacy". ahora, en cuanto llegues a sdk30, ya no hay acceso a dirrootexternal.

en las imagenes, veras el codigo (usando android.jar 30), el resultado,
version del manifiesto para sdk28, version del manifiesto para sdk29, y la
carpeta representando dirrootexternal en my dispositivo con el
archivo creado. el archivo esta alli, y lo puedo abrir y leer el contenido.
 

Attachments

  • 28.png
    28.png
    17 KB · Views: 370
  • 29.png
    29.png
    15.3 KB · Views: 338
  • external.png
    external.png
    26.8 KB · Views: 330
  • rootexternal.png
    rootexternal.png
    39.3 KB · Views: 333
Last edited:

drgottjr

Expert
Licensed User
Longtime User
¡OJO! sigue este vinculo: https://www.b4x.com/android/forum/t...cess-internal-external-storage-sdk-30.130411/

hay manera de guardar archivos en dirrootexternal a partir de sdk30 (hasta proximo aviso y no para play, claro esta). lo he probado y funciona. un poquitin mas complicado que los ejemplos arriba, pero funciona. utiliza un permiso desconocido, y impone otras restricciones, pero, por lo visto, dirrootexternal las evita. suerte.
 

TheFalcon

Active Member
Licensed User
Longtime User
Perfecto, tenia un cacao en el manifest editor de estar probando cosas jaja. Muchas Gracias
 
Top