Spanish Programas iguales pero no funcionan iguales.

Roberto Martinez Lopez

Member
Licensed User
Hago dos programas iguales y no funcionan igual, me explico un programa ya hecho y cambio todo el código es una sola línea.

File.MakeDir (File.DirRootExternal, "A04") que crea un directorio en la memoria del celular y funciona correctamente.
pero al abrir un nuevo archivo y le introduzco la línea de comando y lo ejecutivo sin marcar ningún error pero no genera el directorio.
Adjunto enviado los dos archivos están comentados para saber cual funciona y cual no.
La pregunta les a pasado algo como esto.
 

Attachments

José J. Aguilar

Well-Known Member
Licensed User
Hola Roberto:

Los zips que adjuntas no nos valen para ejecutar tu programa.
Debes ir al menú "Archivo->Exportar como zip". Eso exporta tu programa entero de forma que podamos ejecutarlo.

Has comprobado antes de crear el directorio o archivo, que tienes permisos para escribir en "File.DirRooExternal"?

El directorio por defecto para grabar algo debe ser "File.DirInternal".
Deberías evitar escribir en "File.DirDefaultExternal" y usar "RuntimePermissions.GetSafeDirDefaultExternal", según el tutorial que te he puesto arriba.

saludos,
 

Roberto Martinez Lopez

Member
Licensed User
Gracias por contestar tan rápido.
Adjunto los archivos con el procedimiento que me diste.
También he comprobado que tengo los permisos

Si Crea.jpg
No crea.jpg

Y lo que requiero del programa es obtenerte un archivo que después pueda leer con otra aplicación externa o mandarla por mail.
Ya probé con "RuntimePermissions.GetSafeDirDefaultExternal" según el tutorial que me mandaste y me no funciono (no genera directorio ni archivo).
 

Attachments

José J. Aguilar

Well-Known Member
Licensed User
Hola:

por favor, vuelve a ver el tutorial y sigue los pasos.
No has añadido la librería RuntimePermissions a tu aplicación.
No has añadido al manifest:
B4X:
AddManifestText(
<uses-permission
  android:name="android.permission.WRITE_EXTERNAL_STORAGE"
  android:maxSdkVersion="19" />
)
No has solicitado los permisos en la aplicación (te debe aparecer un mensaje "Desea conceder permisos a la app tal para..."
B4X:
        Starter.rp.CheckAndRequest(Starter.rp.WRITE_EXTERNAL_STORAGE)
        Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
        If Result Then
            'Ya tienes permiso
        Else
            ToastMessageShow("No permission!!!", True)
        End If
 

Roberto Martinez Lopez

Member
Licensed User
Los archivos que mande fueron hechos antes de cualquier modificación del manifest
El archivo saveS este si funciona y si crea el directorio aun sin editar el manifest.
El archivo save este no funciona y no crea el directorio sin modificar el manifest.
Después hice otro programa ya modificado el manifes y de todas formas no funciono. adjunto programa según tutorial.
 

Attachments

José J. Aguilar

Well-Known Member
Licensed User
Pues yo veo que el fichero y el directorio se creas. ¿En qué carpeta estás mirando?
Recuerda que External Storage no se refiere a la tarjeta SD extraíble.

Haciendo un log:
B4X:
Sub Activity_Create(FirstTime As Boolean)
    shared = rp.GetSafeDirDefaultExternal("")
    Dim testFolder As String =  rp.GetSafeDirDefaultExternal("test")
    Log(testFolder)
    File.WriteString(testFolder,"test.txt","aaa")
   
    'No crea Directorio
    File.MakeDir(testFolder, "A04")
End Sub
Te da dónde se está grabando:
/storage/emulated/0/Android/data/b4a.example/files/test

1585338836010.png
 

Roberto Martinez Lopez

Member
Licensed User
Necesito revisar mi pc haber si no tiene algún virus, ya que volví a correr los programas anteriores y ya no funcionaron.
Anteriormente si estaba grabando bien el directorio, esto lo repetí varias veces y ahora no funciona.
Gracias ya se que External Storage no se refiere a la tarjeta SD extraíble.
 

José J. Aguilar

Well-Known Member
Licensed User
Y este último tampoco te fuinciona?

Dudo que un virus en tu pc afecte a los programas en tu móvil, pero quién sabe...
 

Roberto Martinez Lopez

Member
Licensed User
Puede ser en la generación del programa.
Ya le cheque mi pc con en antivirus, tenia unas amenazas, ya las quite, pero ya probé otra ves los programas y nada, voy a intentar con otra pc pero la tengo que instalar la tengo apagada.
Te tengo informado.

Gracias.
 

Roberto Martinez Lopez

Member
Licensed User
Quisiera saber por que el siguiente código si funciona correctamente.
Save:
        File.MakeDir(File.DirRootExternal, "Prueba")
sin modificar el manifest:
anexo el programa en zip y apk y la pantalla del emulador.
En dispositivos físicos y emuladores BlueStacks, NOx y Memu también funcionan
 

Attachments

Last edited:

José J. Aguilar

Well-Known Member
Licensed User
Pues sin estar al 100% seguro de mi respuesta, creo que todo está indicado en el tutorial.

If the targetSdkVersion is lower than 23 then the standard permissions system will be used on all devices including Android 6+, however soon all Google Play apps will need to set the targetSdkVersion to 26+.

Como en tu manifest (que sí está modificado ya que tienes <uses-sdk android:minSdkVersion="4" /> y has borrado el android:targetSdkVersion.
Así que no estás usando los permisos.

Por otro lado también dice en el tutorial:
READ_EXTERNAL_STORAGE / WRITE_EXTERNAL_STORAGE

This is the most common dangerous permission. It is added automatically when you use File.DirDefaultExternal or File.DirRootExternal.
However there is a simple workaround for this.

Es decir, cuando usas File.DirRootExternal se añade el permiso automáticamente, no hace ni falta que lo pongas en el manifest.
Esto lo puedes comprobar en la pestaña del log, pulsando el botón "Lista Permisos".

1585602244141.png
 

José J. Aguilar

Well-Known Member
Licensed User
Te puede ser de ayuda quizás también esta respuesta de @bgsoft

 

Roberto Martinez Lopez

Member
Licensed User
Muchas gracias por tus respuesta.
El manifest realmente no esta modificado, me explico:
Abro un programa antiguo de hace 6 años y borro todas las lineas, no modifico el manifest y sobre esta "plantilla" adiciono lineas nuevas y funciona sin permisos ya que los genera automáticamente. De hecho ve y no tiene el modulo Starter.
Como mi programa no lo voy a subir a Google Play no tengo problema.
esta solución es mas cómoda ya que la carpeta la puedo crear en la raíz y no en una ruta mas larga de acceso.
Ya si llego a subirlo a Google Play pues tendré que modificar el programa.
Nuevamente muchas gracias por tu atención.
 
Top