Invece di usare un modulo, usa il service "Starter" e risolvi il problema.
pur non avendo mai usato BT, né sapendo quale fosse la libreria, etc., suppongo che dovresti usare il servizio Starter.
Invece di usare un modulo, usa il service "Starter" e risolvi il problema.
pur non avendo mai usato BT, né sapendo quale fosse la libreria, etc., suppongo che dovresti usare il servizio Starter.
e no.... ho la necessità di chiamare l'inizializzazione in diversi punti del codice a seconda di quello che succede, tranne all'avvio dell'applicazione che deve partire la lettura della centralina della macchina oppure stopparsi in determinati casi, è lunga da spiegare se no non funziona piùInvece di usare un modulo, usa il service "Starter" e risolvi il problema.
Credo che a te serva che gli eventi scattino in diverse "schermate", non che tu debba inizializzare l'oggetto BT in vari punti (schermate); no?ho la necessità di chiamare l'inizializzazione in diversi punti del codice
Uso solo una Activity in questo progetto perché la visualizzazione è una sola poi il panel lo uso per le impostazioni.Credo che a te serva che gli eventi scattino in diverse "schermate", non che tu debba inizializzare l'oggetto BT in vari punti (schermate); no?
Quindi sia che usi lo Starter con N Activity, sia che usi le B4Pages, dovresti avere un'unica inizializzazione, gli eventi nel punto in cui lo fai (direttamente la Main o nella B4XMainPage), e poi "deleghi" (giri) gli eventi all'Activity o pagina correntemente visibile.
Nel mio post precedente, intendevo dire che se non vuoi usare le B4XPage (che facilitano un bel po' di cose ma quasi tutto si può fare ugualmente con le Activity e basta), dovresti usare il modulo di servizio Starter.Uso solo una Activity in questo progetto perché la visualizzazione è una sola poi il panel lo uso per le impostazioni.
Come faccio a girare l'evento generato dalla Activity alle altre?
Una volta che apro una seconda Activity l'evento della connessione non funziona più, ovvero quando gli arrivano i dati alla connessione essa se mi trovo in un'altra Activity non genera astream_new
'NELLO STARTER.
Sub Process_Globals
Private manager As BleManager2
End Sub
Sub Service_Create
manager.Initialize("Manager")
End Sub
Sub Manager_DataAvailable (ServiceId As String, Characteristics As Map)
' Chiami una Sub dell'Activity in primo piano, ovvero "deleghi" a questa l'operazione che devi eseguire.
CallSubDelayed2(getCurrentActivity, "DataAvailable", ServiceId, Characteristics)
End Sub
Sub getCurrentActivity As Activity
Dim r As Reflector
r.Target = r.GetActivityBA
Return r.GetField("vg")
End Sub
'IN OGNI ACTIVITY CHE DEVE POTER "INTERCETTARE" GLI EVENTI BT.
Sub DataAvailable(ServiceId As String, Characteristics As Map)
'
End Sub
' Stessa cosa per gli altri eventi BT.
Ok quindi BT e Connection se dichiarato in starter l'evento si genera sempre anche con altre activity aperte, questo non lo sapevoNel mio post precedente, intendevo dire che se non vuoi usare le B4XPage (che facilitano un bel po' di cose ma quasi tutto si può fare ugualmente con le Activity e basta), dovresti usare il modulo di servizio Starter.
Dichiari una variabile BT nel servizio, la inizializzi e scrivi i suoi eventi in quello.
Quando nello Starter dovesse scattare ad esempio l'evento:
B4X:'NELLO STARTER. Sub Process_Globals Private manager As BleManager2 End Sub Sub Service_Create manager.Initialize("Manager") End Sub Sub Manager_DataAvailable (ServiceId As String, Characteristics As Map) ' Chiami una Sub dell'Activity in primo piano, ovvero "deleghi" a questa l'operazione che devi eseguire. CallSubDelayed2(getCurrentActivity, "DataAvailable", ServiceId, Characteristics) End Sub Sub getCurrentActivity As Activity Dim r As Reflector r.Target = r.GetActivityBA Return r.GetField("vg") End Sub
B4X:'IN OGNI ACTIVITY CHE DEVE POTER "INTERCETTARE" GLI EVENTI BT. Sub DataAvailable(ServiceId As String, Characteristics As Map) ' End Sub ' Stessa cosa per gli altri eventi BT.
Callsub è per eseguire del codice che mi serve per disabilitare il media player se in esecuzioneSe l'activity non è visibile, perchè dovrebbe essere eseguito il Sub?
Salva quello che vuoi visualizzare in una variabile e quando l'activity è nuovamente visibile, chiami il Sub.
Volendo, passate subito a questo, che in un certo senso si potrebbe definire "un corso più avanzato", in quanto mostra direttamente lo sviluppo di un progetto B4A-B4XPages.@mcqueccu sta iniziando a pubblicare dei video su questo argomento (B4XPages).
Potete guardarli facendogli mostrare i sottotitoli (generati "al volo") in italiano.
https://www.b4x.com/android/forum/threads/b4xpages-video-tutorial-series.157404/
(Non che me ne voglia lavare le mani, eh ?, ma visto che lo fa, vale la pena guardarli)
Sub Class_Globals
Private Root As B4XView
Private xui As XUI
'Stato applicazione
Private img1 As ImageView
Private img2 As ImageView
Private img3 As ImageView
'Pannello di attesa
Private pnlWaiting As Panel
Private lblWaiting As Label
End Sub
Non lo so ma non dare la colpa alle B4XPages, lo avresti avuto anche in un'Activity, molto probabilmente ?
Fai creare la dichiarazione al Designer, facendo attenzione che in quel momento sia attivo il modulo di classe (B4XPage) giusto, ovvero se nel Designer hai il layout che sarà usato da B4XMainPage, che questa sia aperta nell'editor e non un altro modulo.
Designer. Menu: Tools - Generate Members
View attachment 147966
Nota che ho spuntato B4XView, in modo che Label, Panel, Button, ... vengano dichiarati come B4XView e quindi il progetto sarà più compatibile anche con B4J e B4i.
Per lo stesso motivo dovresti aggiungere al layout delle B4XImageView anziché delle ImageView. Il problema delle prime è che, se non sono cambiate le cose recentemente, non hanno alcuni eventi, principalmente il Click. Se necessario, dovrai sovrapporre alla B4XImageView un Panel trasparente ed usare l'evento Click (o Touch) di quest'ultimo. Io aggiunsi questi due eventi ma non ricordo se poi pubblicai la mia versione di B4XImageView (ma cercherò ed aggiornerò questo post).
P.S. lmB4XImageView
Sub Activity_KeyPress (KeyCode As Int) As Boolean
Select KeyCode
Case KeyCodes.KEYCODE_BACK
If ELM327.Connecting = True Then
CallSub2(B4XPages.MainPage,"Waiting_Show","Annullamento connessione...")
'annullo la connessione
ELM327.CancelConnecting = True
End If
End Select
Return True
'Return B4XPages.Delegate.Activity_KeyPress(KeyCode)
End Sub
Perché devi "dimenticare" Activity e quindi tutti i suoi eventi.tutti gli eventi tipo Activity_KeyPress ecc.ecc. non funzionano in B4XMainPage, ma in Main si perchè?
https://www.b4x.com/android/forum/threads/b4xpages-and-activity_keypress.157527/tutti gli eventi tipo Activity_KeyPress ecc.ecc. non funzionano in B4XMainPage, ma in Main si perchè?