Spanish [SOLUCIONADO] problema archivos con sdk 29

cas6678

Active Member
Licensed User
Longtime User
Buenos dias.

Tengo una aplicacion que tiene targetSdkVersion="19" y funciona sin problemas. Lo primero que hace la aplicacion es buscar si existe determinado .txt y si no lo crea.

Intentando subir al Google Play me dice que la version target minima es 29, por lo que tuve que cambiar este parametro, 19 por 29.

Veo ahora que no funciona. Al parecer lo que pasa segun el log es que da error al hacer esta lectura o escritura del archivo. Adjunto log.

¿Ha habido algun cambio sustancial en la forma de acceder a los archivos desde la aplicacion entre la version 19 y la 29?

B4X:
Registro conectado a:  Xiaomi M2007J22G
--------- beginning of main
--------- beginning of system
Copying updated assets files (36)
*** Service (starter) Create ***
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
Error occurred on line: 1085 (Main)
java.io.FileNotFoundException: /storage/emulated/0/Android/data/b4a.CasPhoneGPSBeta/files/ccph.txt: open failed: ENOENT (No such file or directory)
    at libcore.io.IoBridge.open(IoBridge.java:496)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:235)
    at anywheresoftware.b4a.objects.streams.File.OpenOutput(File.java:449)
    at anywheresoftware.b4a.objects.streams.File.WriteList(File.java:252)
    at b4a.CasPhoneGPSBeta.main._grabararchivo(main.java:1122)
    at b4a.CasPhoneGPSBeta.main._activity_create(main.java:660)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:732)
    at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:351)
    at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:144)
    at b4a.CasPhoneGPSBeta.main.afterFirstLayout(main.java:105)
    at b4a.CasPhoneGPSBeta.main.access$000(main.java:17)
    at b4a.CasPhoneGPSBeta.main$WaitForLayout.run(main.java:83)
    at android.os.Handler.handleCallback(Handler.java:914)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:225)
    at android.app.ActivityThread.main(ActivityThread.java:7566)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:994)
Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
    at libcore.io.Linux.open(Native Method)
    at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
    at libcore.io.BlockGuardOs.open(BlockGuardOs.java:252)
    at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
    at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:7463)
    at libcore.io.IoBridge.open(IoBridge.java:482)
    ... 21 more
** Activity (main) Resume **

La linea 1085 que da error es esta:

B4X:
File.WriteList(File.DirdefaultExternal,"ccph.txt",list1)

Gracias
 

vecino

Well-Known Member
Licensed User
Longtime User
Sí, los permisos, cada vez hacen falta más permisos para cualquier cosa.
Mira este hilo, por ejemplo.
O haz una búsqueda por permission.WRITE_EXTERNAL_STORAGE
 

josejad

Expert
Licensed User
Longtime User
Alguno ha habido...

 

cas6678

Active Member
Licensed User
Longtime User
Voy a probar ahora lo que me indicais, sin embargo tengo una duda. Cuando....

B4X:
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="19" />

Que funcion cumple maxSdkVersion="19"??? Yo de momento en mis manifiestos solo he usado minSdkVersion y targetSdkVersion. Tengo que poner siempre el maximo? El sentido comun me dice que debe ser al menos como el target, ¿es asi?
 

josejad

Expert
Licensed User
Longtime User
Ando con el móvil, aqui tienes algunas respuestas

 

TILogistic

Expert
Licensed User
Longtime User
Corrección, aquí indica porque:

 

cas6678

Active Member
Licensed User
Longtime User
Simplemente añadi esto al principio de la activity
RuntimePermissions.GetSafeDirDefaultExternal("")

En cuanto a :
B4X:
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="19" />
Al subir a google por permiso de write external storage duplicado. Lei algo de @Erel sobre sacarlo, lo saque y parece que funciona
 

TILogistic

Expert
Licensed User
Longtime User
Lei algo de @Erel sobre sacarlo, lo saque y parece que funciona

Aqui:
 
Top