Ho estrapolato la classe dalla libreria e l'ho modificata un po per mio uso personale (specie per i Log).
Inoltre ho creato un progettino di test con una b4xpage.
Ma giustamente nel file manifest c'è un riferimento a "newinst2.bas" che non uso e mi dà errore
Posso non considerarlo? Come le sostituisco, se servono, le istruzioni:
B4X:
Sub Service_Start (StartingIntent As Intent)
If StartingIntent.Action = "android.intent.action.MY_PACKAGE_REPLACED" Then
pkg = GetPackageName
MyAppReload
End If
End Sub
'e nel manifest
AddReceiverText(newinst2,
<intent-filter>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
</intent-filter>)
(volevo chiedere a @udg direttamente ma ho letto che è a palermo in vacanza... )
Ciao, partirò tra un mese..
Newinst2 è il service che viene chiamato da Android quando rileva l'evento MY_PACKAGE_REPLACED.
Il suo scopo è far ripartire l'app una volta aggiornata. Se non ti occorre, puoi eliminarlo e così pure la sua presenza nel Manifest.
Avresti una classe che cerca una nuova versione e la scarica poi chiede all'utente di aggiiornarla, ma indipendentemente da cosa scelga di fare l'utente, resta in esecuzione la "vecchia" copia dell'app.
In teoria dovrebbe funzionare perché ciò che fa è lanciare Main (per cui la nuova versione dell'app partirebbe da zero, come appena lanciata).
Non ho mai avuto il tempo di aggiornare il mio esempio in formato B4xPages, quindi temo per te che farai da cavia..
Ricorda, appunto, che si riparte da zero e quindi non vengono preservati eventuali dati o elementi presenti nelle varie Pages. Non è diverso da quanto avveniva nel modello Activity, ma meglio ricordarlo perché ormai siamo abituati a pensere alle Pages come qualcosa che rimane attivo per tutto il tempo.
Diciamo che lo scopo della libreria è verificare se esiste una nuova versione di un'app, chiudere quella attuale e lanciare la nuova versione. In modo automatizzato piutttosto che manualmente.
Ho aggiunto il file newinst2.bas e pare funzionare tutto con l'app di test.
Ogni tanto, però, non capisco perchè, mi dice "App non installata poichè il pacchetto è in conflitto con un pacchetto esistente" e devo perforza disinstallarla e poi reinstallarla.
E' un'app che, ad ogni avvio, legge dei dati da internet e quindi disinstallando non cancello niente come dati da conservare, ma se fosse un'app che usa ad esempio un database, sarebbe un bel problema...
Bisognerebbe capire cosa possa provocare il conflitto tra pacchetti e, soprattitto, cosa intendano per conflitto.
Magari una qualche forma di cache?
Leggi qui, magari è utile