Spanish (SOLUCIONADO)Error al instalar APK desde codigo

TheFalcon

Active Member
Licensed User
Buenas Señor@s, cuanto tiempo sin dar morcilla :p. Tengo un Problemilla y os pongo en situación.
Yo tengo una aplicación que se actualiza descargándose la ultima versión de una FTP y luego al arrancar la aplicación comprueba que existe el archivo y lo instala hasta hay IBA todo perfecto, pero ahora al ir a meter una actualización nueva, me da error a la hora de ir a instalarla.

El código que uso al abrir la aplicación para instalar es el mismo

B4X:
    If File.Exists(File.DirRootExternal, "cdg.apk") = True Then
        Dim i As Intent
        i.Initialize(i.ACTION_VIEW, "file://" & File.Combine(File.DirRootExternal, "cdg.apk"))
        i.SetType("application/vnd.android.package-archive")
        StartActivity(i)
        
        File.WriteString(File.DirRootExternal,"Actualizado.txt","")
    End If

y ahora me da error al abrir la aplicación y llegar a ese punto que era el update, NO CREO que sea del código, pues es el Mismo, solo cambie 1 tontería, y es mas, e cogido versiones antiguas y actualizado también a versiones antiguas ( que a funcionado siempre sin problemas, ) y em arroja el error, así que puede ser por haber actualizado B4, que haya cambiado el modo de hacerlo, por que no encuentro otra explicación.

Erro que me arroja:
B4X:
*** Service (starter) Create ***
** Service (starter) Start **
** Activity (main) Create, isFirst = true **

main_activity_create (java line: 472)
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///storage/emulated/0/cdg.apk typ=application/vnd.android.package-archive flg=0x20000 }
    at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2066)
    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1720)
    at android.app.Activity.startActivityForResult(Activity.java:5277)
    at android.app.Activity.startActivityForResult(Activity.java:5235)
    at android.app.Activity.startActivity(Activity.java:5606)
    at android.app.Activity.startActivity(Activity.java:5574)
    at anywheresoftware.b4a.keywords.Common.StartActivity(Common.java:857)
    at com.fjo.CDG_Inventario.main._activity_create(main.java:472)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:213)
    at com.fjo.CDG_Inventario.main.afterFirstLayout(main.java:105)
    at com.fjo.CDG_Inventario.main.access$000(main.java:17)
    at com.fjo.CDG_Inventario.main$WaitForLayout.run(main.java:83)
    at android.os.Handler.handleCallback(Handler.java:883)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:226)
    at android.app.ActivityThread.main(ActivityThread.java:7592)
    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:950)

Alguna idea de por que puede ser?. Espero estén bien sin pasar mucha calor. Un saludo a tod@s
 

José J. Aguilar

Expert
Licensed User
Hola TheFalcon, qué de tiempo.

Usas AppUpdate o el código es tuyo?

¿Tienes permisos para usar DirRootExternal? Lee el tutorial de Runtime Permissions (especialmente la parte de almacenamiento) y prueba a hacer la instalación desde otra carpeta, o comprueba si tienes acceso (aunque por el primer If, parece que deberías tener).
Muchas cosas están cambiando con la gestión de almacenamiento en android (no en B4A).

Echa un ojo también a esto

saludos,
 

TheFalcon

Active Member
Licensed User
Usas AppUpdate o el código es tuyo?
No uso APPUpdate, ni lo he mirado jeje, yo la actualización la tengo en una FTP y el comprueba si existe o no y la descarga, reinicia aplicación y al iniciar la instala ( o por lo menos lo hacia)

¿Tienes permisos para usar DirRootExternal?
Si, en el mamifest, como siempre
B4X:
AddManifestText(
<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="19"/>
<supports-screens android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:anyDensity="true"/>)
SetApplicationAttribute(android:icon, "@drawable/icon")
SetApplicationAttribute(android:label, "$LABEL$")

'End of default text.
AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)

Creo que va a ser por lo que comentas de que están cambiando cosas en la gestión de android con el almacenamiento, voy a mirarlo, ya que ahora las pruebas la estoy haciendo con un android PocoM3 que es mas moderno que los dispositivos android para los que se hizo la aplicación.
A ver si mañana me traigo un dispositivo de los originales para contrastar pruebas, y me leeré lo que me me comentas al final, y ya te digo
 

TheFalcon

Active Member
Licensed User
Cuaderno de bitácora :p. e estado probando, y creo que no es de permisos, ya que si pongo en la misma ruta un PDF lo intento abrir con INTENT, me lo abre sin problemas
B4X:
Dim i As Intent
        i.Initialize(i.ACTION_VIEW, "file://" & File.Combine(File.DirRootExternal, "A.pdf"))
        Log("file://" & File.Combine(File.DirRootExternal, "A.pdf"))
        i.SetType("application/pdf")
        StartActivity(i)

así que creo que el problema puede ser, el modo en que en las versiones de Android +11 gestiona el tipo, ya que para instalar las APK yo usaba

B4X:
  i.SetType("application/vnd.android.package-archive")

Lo que no encuentro es si ahora se ejecuta de otro modo , en un dispositivo antiguo si me actualiza sin Problemas
 

TheFalcon

Active Member
Licensed User
Bueno, te comento jeje. ya había mirado hay, cambiando file:// por content:// , me dice "No se a podido analizar el paquete."
He probado un par de cosas mas que vi por hay de erel, una de ellas te decía que permitieras paquetes desconocidos, los permitía pero al abrir la aplicación otra vez me lo decía en un bucle. No encuentro ahora ese hilo.
Mañana probare con mas tiempo y te iré comentando.

Lo que si e descartado es que sea del programa, me he traído un dispositivo original de la aplicación del trabajo y instala la nueva versión sin problema al descargarla, con lo cual el problema es por Android y las restricciones nuevas que hayan metido, no pueden estarse quietos :mad:
 

José J. Aguilar

Expert
Licensed User
Échale un ojo a cómo lo hacen en la librería AppUpdate, no sé hasta qué versión de Android lo ha probado la gente, pero no he visto últimamente que haya dado problemas.

saludos,
 

TheFalcon

Active Member
Licensed User
Échale un ojo a cómo lo hacen en la librería AppUpdate, no sé hasta qué versión de Android lo ha probado la gente, pero no he visto últimamente que haya dado problemas.

saludos,
La estuve mirando pero me da error en okhttputils2.xml y el caso que yo uso esa libreria sin problemas, no se por que me da error en un xml
le daré otra vuelta
 

José J. Aguilar

Expert
Licensed User
Hum... comprueba que tienes la versión 2.96 y que no tienes ninguna librería antigua en la carpeta de librerías adicionales

1628541608922.png
 

TheFalcon

Active Member
Licensed User
Perdón por no responder antes, el trabajo es malo :p.

Hay estoy peleándome con el autoupdate y con la otra opción de Erel que es el "Safe Apk Installation" que encontré el post APK SAFE INSTALL

no obstante seguiré probando y comentare, y también seguiré intentándolo con el autoupdate
 
Last edited:

TheFalcon

Active Member
Licensed User
LISTO. Solucionado con la opción del post AK SAFE INSTALL , me ha costado configurarlo pero perfecto. Igualmente trasteare el autoupdate

El problema lo tengo ahora con permisos que hare un post nuevo, que yo todo o casi todo lo trabajaba en File.DirRootExternal y en las nuevas versiones de Android me da error supongo que por permisos, e de ponerlo en File.DirDefaultExternal , y a ver como lo cambio todo 😅. Muchas Gracias por tu ayuda como siempre José
 

José J. Aguilar

Expert
Licensed User
en las nuevas versiones de Android me da error
Aquí tienes un código de flujo de Erel para ayudar a seleccionar una carpeta


saludos,
 
Top