Italian far funzionare app in background

fifiddu70

Well-Known Member
Licensed User
Longtime User
Ciao a tutti, ho realizzato una app che riceve un file di testo txt con un numero che varia attraverso il sistema httpjob, vorrei poterla usare in background e non sempre attiva e fare in modo che alla ricezione di un determinato numero l'app emetta un suono ed aprendosi avvisa che il numero programmato in una casella di testo è uguale a quello ricevuto, sapete dirmi come posso metterla in background funzionando quindi anche quando non è in primo piano?
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
Scusate qualcuno mi fa capire come integrare il codice all'interno della mia app per farla funzionare quando non è in primo piano? qualche esempio magari per capire meglio?
 

sirjo66

Well-Known Member
Licensed User
Longtime User
io ho realizzato un piccolo server http dove la mia app è sempre in attesa di un comando attraverso HTTP
ci sono tanti esempi in rete dai quali sono proprio partito, ed utilizza un semplice "Service Module" dove apro una porta tramite l'oggetto HttpServer
Anche se il programma è in background, oppure il display è spento, dando un comando alla app questa risponde senza problemi, però non ho idea di come fare per accendere il display e portare la app in primo piano, questo non l'ho mai fatto

Se devi mandare un numero attraverso l'HTTP non ti conviene utilizzare un file di testo (sennò dovresti utilizzare FTP) ma puoi utilizzare il GET su HTTP

Sergio

un numero che varia attraverso il sistema httpjob
qui sinceramente non ci ho capito nulla
 

LucaMs

Expert
Licensed User
Longtime User
però non ho idea di come fare per accendere il display e portare la app in primo piano, questo non l'ho mai fatto
Accendere il display non lo so (ma si trova); per portare l'app in primo piano dovrebbe essere sufficiente chiamare una routine di un'Activity (di solito la Main) usando CallSubDelayed (dall'interno del servizio che riceve il comando http).
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
io ho realizzato un piccolo server http dove la mia app è sempre in attesa di un comando attraverso HTTP
ci sono tanti esempi in rete dai quali sono proprio partito, ed utilizza un semplice "Service Module" dove apro una porta tramite l'oggetto HttpServer
Anche se il programma è in background, oppure il display è spento, dando un comando alla app questa risponde senza problemi, però non ho idea di come fare per accendere il display e portare la app in primo piano, questo non l'ho mai fatto

Se devi mandare un numero attraverso l'HTTP non ti conviene utilizzare un file di testo (sennò dovresti utilizzare FTP) ma puoi utilizzare il GET su HTTP

Sergio


qui sinceramente non ci ho capito nulla
in sostanza ho sul server del mio sito web una cartella dove all'interno c'è una pagina html con un pulsante ed una stringa di testo, ed una pagina php che esegue una operazione che crea un documento di testo txt con all'interno un numero, questo numero varia, in pratica utilizzo un'altra app che con il codice che segue invio un comando alla pagina html con un nuovo numero:
B4X:
Dim Javascript As StringBuilder
            Javascript.Initialize
            Javascript.Append("document.forms[0].variabile.value='"& "A" & txtconteggio.text & "';")
            Javascript.Append("document.forms[0].submit()")
            Log("Executing javascript: "&Javascript.ToString)
        
            Dim WebViewExtras1 As WebViewExtras
            WebViewExtras1.executeJavascript(webview1, Javascript.ToString)

nel server riceve questo nuovo comando e genera un documento di testo txt con un numero all'interno, attraverso un'altra app leggo il contenuto di questo numero e lo visualizzo in una label, questo con il seguente codice:
B4X:
Sub JobDone (job As HttpJob)
    Log("JobName = " & job.JobName & ", Success = " & job.Success)
    If job.Success = True Then
        Select job.JobName
            Case "Job" , "job2"
                'print the result to the logs
                txtmessagerx.Text=job.GetString
                Log(job.GetString)
                If txtmessagerx.Text.StartsWith("A") Then
                    lblmessage.Text=txtmessagerx.Text 
                    else if txtmessagerx.Text.StartsWith("B") Then
                    lblmessage2.Text=txtmessagerx.Text
                End If
                
                
                
                
        
            Case "Job3"
                'show the downloaded image
                Activity.SetBackgroundImage(job.GetBitmap)
        End Select
    Else
        Log("Error: " & job.ErrorMessage)
        ToastMessageShow("Error: " & job.ErrorMessage, True)
    End If
    job.Release
    
End Sub

ora ho necessità che l'app quando non è in primo piano che questa lblmessage appena riceve un numero uguale al numero memorizzato in una edittext vorrei che mi squillasse il telefono e che mi viasualizzi un mesaggio,
spero di essere stato chiaro.
 

LucaMs

Expert
Licensed User
Longtime User
ora ho necessità che l'app quando non è in primo piano che questa lblmessage appena riceve un numero
Come fa a riempire una label se l'app non è in primo piano?

Fai invece in modo che il servizio sempre attivo riceva il dato, faccia il confronto necessario e se positivo apri l'Activity (non è necessario un intent, come ho scritto precedentemente, basta uno StartActivity(NomeActivity)).
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
LucaMs a me basterebbe una semplice appa che riceva questo numero dal mio server e che con una edittext possa inserire un numero che appena sono uguali al dato ricevuto questi faccia arrivare una notifica visiva e sonora, mi basta anche così ma non ho capito come farla, il lato server ha come accennato una pagina html ed una pagina php che genera questo documento di testo txt con il numero, a me interessa creare una app che una volta impostato un numero più alto e appena arriva a quel numero fare sta bendetta nitifica visiva e sonora magari un piccolo messaggio anche che visualizza il numero, ma non voglio che questa app rimanga sempre attiva per far si che appena arrivi il numero interessato faccia lo stesso lavoro.
 

LucaMs

Expert
Licensed User
Longtime User
LucaMs a me basterebbe una semplice appa che riceva questo numero dal mio server e che con una edittext possa inserire un numero che appena sono uguali al dato ricevuto questi faccia arrivare una notifica visiva e sonora,
E questo sarebbe semplice se l'app fosse sempre in Foreground (primo piano) ma tu prevedi, anzi vuoi, che funzioni anche stando in Background, attiva "sullo sfondo", mentre un'altra app sia attiva e/o il display spento.

Per ottenere questo, il dato dev'essere ricevuto da un modulo di servizio, non da un'Activity della tua app.

E' nel modulo di servizio che devi ricevere il dato dal server ed è nel modulo di servizio che devi confrontare i due valori per sapere se sono uguali e quindi visualizzare un messaggio (e per visualizzarlo puoi usare StartActivity(Main), magari creando nella Main una variabile stringa pubblica che riempi dal servizio: Main.TestoMessaggio = "asdflkj" e poi StartActivity(Main), nella Activity_Resume: MsgBox(TestoMessaggio, "Titolo")).
 

sirjo66

Well-Known Member
Licensed User
Longtime User
io ancora ho confusione in testa e non ci ho capito bene

Tu dici che la app riceve questo numero, quindi si deduce che sia il server che (quando qualcuno modifica questo numero) si occupi di spedirlo al telefonino (ma non hai specificato come fa a spedirlo e a riceverlo).

In un altro punto invece dici che attraverso un'altra app leggo il contenuto di questo numero e qui invece si deduce che sia la app sul telefonino ad interrogare il server per ricavarsi questo numero.
Spiega meglio che non ho capito cosa succede.

Se è davvero la tua app che legge il contenuto dal server, avrai fatto un timer o cose del genere che ogni tot di tempo esegue una richiesta GET al server e ne riceve il risultato, è così ??
Questa soluzione (chiamata polling) è la più semplice ma ti comporta un consumo alto di batteria e un alto traffico sulla rete.

Potresti invece pensare alla soluzione contraria, cioè che sia il server che (solo quando necessario) invia alla app un messaggio che quindi farà tutto quello che vuoi (tipo whatsapp).

Sergio
 

Star-Dust

Expert
Licensed User
Longtime User
Credo che abbia tentato di dire che ha già un App che utilizzando uno script PHP presente sul server, genera un file TXT che salva nel server. Questo txt contiene un valore numerico.
.., in pratica utilizzo un'altra app che con il codice che segue invio un comando alla pagina html con un nuovo numero:
......
nel server riceve questo nuovo comando e genera un documento di testo txt con un numero all'interno, .

L'App (quella che vorrebbe fare adesso) ad ogni variazione di questo file nel legga il contenuto rimanendo in background. Poi confronta il valore con il precedente e decide se lanciare una notifica.
 
Last edited:

sirjo66

Well-Known Member
Licensed User
Longtime User
sì, anche a me sembrava di aver capito così, e se è proprio così sta lavorando in polling
 

Star-Dust

Expert
Licensed User
Longtime User
sì, anche a me sembrava di aver capito così, e se è proprio così sta lavorando in polling
Vorrebbe, perché ancora non ha fatto :p

Mi chiedo se il passaggio dal server per lui e necessario oppure potrebbe semplicemente inviare un pacchetto UDP con il valore a tutta la rete locale e creare un un servizio background che sta in ascolto
 

udg

Expert
Licensed User
Longtime User
Potrebbe risolvere con Firebase massaging. L'app che genera e salva il nuovo numero/file sul server si incarica anche di inviare un messaggio FB.
L'app sul device viene "svegliata" da Android, processa il messaggio e decide cosa fare (compresa l'eventualità di generare una notifica).
Consumo di batteria minimo; funziona anche se l'app non è in foreground; per un certo lasso din tempo funziona anche se il device è spento al momento dell'invio del messaggio.
 

Star-Dust

Expert
Licensed User
Longtime User
Potrebbe risolvere con Firebase massaging. L'app che genera e salva il nuovo numero/file sul server si incarica anche di inviare un messaggio FB.
L'app sul device viene "svegliata" da Android, processa il messaggio e decide cosa fare (compresa l'eventualità di generare una notifica).
Consumo di batteria minimo; funziona anche se l'app non è in foreground; per un certo lasso din tempo funziona anche se il device è spento al momento dell'invio del messaggio.
Bella idea. E semplice da realizzare?
Io firebase lo uso solo per AdMod
 
Top