Ciao ho un problema con un widget che ho creato con il codice come da tutorial:
B4X:
#Region Service Attributes
#StartAtBoot: False
#End Region
Sub Process_Globals
Private RV As RemoteViews
End Sub
Sub Service_Create
RV = ConfigureHomeWidget("layAppWidget1080", "RV", 0, "test",True)
End Sub
Sub Service_Start (StartingIntent As Intent)
If RV.HandleWidgetEvents(StartingIntent) Then Return
Sleep(0)
Service.StopAutomaticForeground
End Sub
Sub RV_RequestUpdate
LoadWidgetData
RV.UpdateWidget
End Sub
Sub RV_Disabled
StopService("")
End Sub
Sub LoadWidgetData
End Sub
Sub Service_Destroy
End Sub
l'applicazione funziona bene fino a quando non visualizzo il widget poi se non inserisco il codice seguente:
Sleep(0)
Service.StopAutomaticForeground
nella Sub Service_Start (StartingIntent As Intent)
al primo avvio dell'applicazione con widget visualizzato si avvia normalmente, al secondo avvio viene visualizzato lo schermo nero con i tasti android back menu ecc... e l'applicazione non si apre, mettendo il codice sopra menzionato la situazione migliora nel senso che il problema all'avviamento si ripete sporadicamente.
In oltre ho notato che quando l'app non parte (schermo nero) se faccio lo svuotamento della Cache poi al riavvio dell'applicazione questa parte e il problema si ripresenta dopo un po di tempo.
A cosa è dovuto?
Grazie
Ho litigato con i widget (un widget) solo per prova, più o meno nel 1492.
Non so da quale esempio tu abbia copiato, ma sto guardando il tutorial di Erel e nel suo codice non è così.
Segui quello (se hai ancora problemi e non hai già risolto).
Ho litigato con i widget (un widget) solo per prova, più o meno nel 1492.
Non so da quale esempio tu abbia copiato, ma sto guardando il tutorial di Erel e nel suo codice non è così.
Segui quello (se hai ancora problemi e non hai già risolto).
Sub Service_Start (StartingIntent As Intent)
If rv.HandleWidgetEvents(StartingIntent) Then Return
End Sub
The above code checks the Intent message that caused this service to start and is responsible for raising the events related to the widget. It returns true if an event was raised.
In effetti non capisco granché quel codice e quella spiegazione.
Ammesso che quell'istruzione (sarà certamente così) vada a verficare se uno dei due eventi sia scattato, scrivere il solo Return a cosa serve? Mah.
Di norma, si dice che in quel modo l'evento venga "consumato". Mah 2, la vendetta.
In effetti non capisco granché quel codice e quella spiegazione.
Ammesso che quell'istruzione (sarà certamente così) vada a verficare se uno dei due eventi sia scattato, scrivere il solo Return a cosa serve? Mah.
Di norma, si dice che in quel modo l'evento venga "consumato". Mah 2, la vendetta.
boooo… provo a eliminarlo.
Ti spiego… visualizzo il widget sullo schermo, apro l'appplicazione e questa si avvia normalmente.
Chiudo l'applicazione sempre con il widget visualizzato, riapro l'applicazione e schermo nero, non si avvia.
Se metto quel codice sleep(0) e Service.StopAutomaticForeground l'applicazione si blocca di meno ma qualche volta lo fa ugualmente, ora provo a togliere il return
Ora l'ho tolto devo provare prima c'era.
Altra domanda…
per aprire l'app cliccando sul widget??
per ridimensionare il widget a seconda del telefono?? ora ho disegnato un widget con width=860 che va bene per il mio telefono, se però cambio telefono il widget non si vede tutto è tagliato perché il display è più piccolo, il widget supporta solo l'ancoraggio a sinistra l'auto adattamento no
(ripeto che provai a creare solo un widget proprio agli inizi, 7 anni fa, più o meno, quindi esperienza praticamente nulla).
A quanto ho capito, devi scrivere nel modulo di servizio gli eventi delle view che compongono il layout del widget.
All'interno di uno di questi potresti provare ad eseguire un CallSubDelayed(Main, "NomeDiUnaRoutineNelMain")
(ripeto che provai a creare solo un widget proprio agli inizi, 7 anni fa, più o meno, quindi esperienza praticamente nulla).
A quanto ho capito, devi scrivere nel modulo di servizio gli eventi delle view che compongono il layout del widget.
All'interno di uno di questi potresti provare ad eseguire un CallSubDelayed(Main, "NomeDiUnaRoutineNelMain")
Questo è lo scoglio principale sul quale si è incagliato @Sagenut e credo non abbia ancora risolto.
A quanto ho capito, devi scrivere nel modulo di servizio gli eventi delle view che compongono il layout del widget.
All'interno di uno di questi potresti provare ad eseguire un CallSubDelayed(Main, "NomeDiUnaRoutineNelMain")
Chiaramente devi creare una sub per ogni view che vuoi che apra l'app e dovrai mettere il nome giusto della Activity che vuoi.
Và messo nel servizio del widget ovviamente.