Spanish [SOLUCIONADO] Leer (y modificar) archivo de otro paquete

cas6678

Active Member
Licensed User
Longtime User
Hola. Volvemos a programar :) y vuelven a surgir los problemas :(, asi que aqui estamos otra vez buscando informacion y consultando.

Tengo varias aplicaciones, algunas de ellas guardan un archivo txt que contiene algunos parametros de configuracion para esa aplicacion. La aplicacion los abre y los trabaja segun necesite con:

B4X:
File.DirdefaultExternal,"archivo.txt"

Estos se guardan en: Dispositivo/Android/data/nombredelpaquete/files

Hasta aqui bien.

Dado que el proyecto se me hace cada vez mas grande se me ocurrio para agilizar hacer una aplicacion que me pueda editar estos archivos de las otras aplicaciones sin tener que entrar a cada una de ellas.

Aqui las dudas:

Como accedo desde esta nueva aplicacion a la carpeta FILES de las otras aplicaciones?

Necesito colocar algun permiso especial en el manifest para que me permita acceder a modificar estos archivos que son de otra aplicacion?
 

Descartex

Well-Known Member
Licensed User
Longtime User
Muy buenas.
Como dicen en este post:
https://www.b4x.com/android/forum/threads/accessing-other-apk-database.8515/
las carpetas internas no pueden ser accesibles para otras aplicaciones.

Como solucion, se me ocurre que crees un directorio oculto llamado, por ejemplo, ".cas6678config" algo asi:
B4X:
File.MakeDir(File.DirRootExternal,".cas6678config")
Y en él almacenar los ficheros de configuración, asi, desde cualquiera de tus apps podrías modificarlos.

Un saludo.
 

cas6678

Active Member
Licensed User
Longtime User
Ok Descartex muchas gracias. Voy a remplantearme el tema e intentar resolverlo de otra man
 

Descartex

Well-Known Member
Licensed User
Longtime User
Como lo solucionaste?
Un saludo.
 

cas6678

Active Member
Licensed User
Longtime User
Bueno realmente no lo solucione ;). Puse solucionado porque lo que encontre es respuesta a mi pregunta: No se puede hacer.

Lo que estoy haciendo es generar los archivos y luego los pasare manualmente a la carpeta en cuestion. Tu solucion no esta mal, pero me haria modificar todas las aplicaciones, (incluso las que ya funcionan en dispositivos de terceros). Lo que yo quiero es algo para agilizar mi labor de programar y testear, cada vez que cambio algo en mis dispositivos de prueba tengo que meterme en los diferentes archivos de configuracion y lo que pretendo es hacerlo desde afuera para ahorrar tiempo. Asi que si no puedo hacerlo directamente al menos creare el archivo con los datos de configuracion y lo pasare manualmente.

Gracias.
 

cas6678

Active Member
Licensed User
Longtime User
Hola de nuevo.

Estoy un poco confundido porque a pesar de la explicacion de que no se podia hacer, lo cierto es que puedo.

B4X:
File.WriteList(File.DirRootExternal,"Android/Data/b4a.nombredelpaquete/files/archivo.txt",list1)

Y esto me permite acceder a modificar lo que yo quiero.

Donde me perdi?
 

Descartex

Well-Known Member
Licensed User
Longtime User
Anda!!!
Y has comprobado que se modifica correctamente el fichero??
Si es asi, igual se trata de un bug de android... prueba en diferentes dispositivos si puedes (si necesitas, pongo a tu disposicion los mios).
Un saludo.
 

cas6678

Active Member
Licensed User
Longtime User
Luego lo probare en la tablet y en el telefono de mi hijo. En realidad lo unico que necesito es que funcione en mi telefono para poder hacer pruebas rapidamente y no tener que editar cada vez los archivos de cada una de las aplicaciones, por ejemplo cuando quiero probar un bluetooth que no es el mio y para el cual mi app no esta configurada.

Si. el fichero se modifica correctamente. Con la nueva aplicacion lo leo en la carpeta files de la ubicacion orginal (otra), lo modifico, y lo vuelo a grabar y dejar donde estaba.

Si quieres probar tu en tu dispositvo yo haria asi:

B4X:
Dim list1 As List
list1.Initialize
list1.Add("prueba")
File.WriteList(File.DirRootExternal,"Android/Data/b4a.nombredelpaquetedeotraaplicacion/files/archivo.txt",list1)
Dim list2 As List
list2.Initialize
list2 = File.ReadList(File.DirRootExternal,"Android/Data/b4a.nombredelpaquetedeotraaplicacion/files/archivo.txt")
Log(list2)

En el log tendrias que ver "prueba" y si luego vas a la carpeta file tendrias que ver archivo.txt
 
Top