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

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,
 
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

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:
Code: Copy
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..."
Code: Copy
        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
 
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

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:
Code: Copy
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
 
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.
 
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...
 
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.
 
Quisiera saber por que el siguiente código si funciona correctamente.
Code: Copy
        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

  • Save.zip
    Save.zip
    6.6 KB · Views: 574
  • Save.apk
    Save.apk
    125.3 KB · Views: 590
  • Save.jpg
    Save.jpg
    83.4 KB · Views: 640
Last edited:
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
 
Te puede ser de ayuda quizás también esta respuesta de @bgsoft

 
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.
 
Back
Top