Italian far funzionare app in background

Discussion in 'Italian Forum' started by fifiddu70, Nov 13, 2018.

  1. fifiddu70

    fifiddu70 Well-Known Member Licensed 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?
     
  2. Star-Dust

    Star-Dust Expert Licensed User

    MarcoRome, Filippo and fifiddu70 like this.
  3. fifiddu70

    fifiddu70 Well-Known Member Licensed 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?
     
  4. sirjo66

    sirjo66 Well-Known Member Licensed 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
     
    fifiddu70 and Star-Dust like this.
  5. LucaMs

    LucaMs Expert Licensed User

    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).
     
  6. fifiddu70

    fifiddu70 Well-Known Member Licensed User

    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:
    Code:
    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:
    Code:
    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.
     
  7. LucaMs

    LucaMs Expert Licensed User

    Non ti andrebbe una normale notifica? (ovvero non compare direttamente una dialog col messaggio, ma suona e visualizza un'icona sulla barra)
     
  8. LucaMs

    LucaMs Expert Licensed User

    No, questo non funziona; aprirebbe l'Activity chiamata tramite CallSubDelayed ma solo se l'app fosse già in primo piano.

    Quindi, è necessario usare un intent (se non è sufficiente una notifica).
     
  9. LucaMs

    LucaMs Expert Licensed User

    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)).
     
  10. fifiddu70

    fifiddu70 Well-Known Member Licensed 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.
     
  11. LucaMs

    LucaMs Expert Licensed User

    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")).
     
  12. sirjo66

    sirjo66 Well-Known Member Licensed 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
     
  13. Star-Dust

    Star-Dust Expert Licensed 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.
    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: Nov 15, 2018
  14. sirjo66

    sirjo66 Well-Known Member Licensed User

    sì, anche a me sembrava di aver capito così, e se è proprio così sta lavorando in polling
     
  15. Star-Dust

    Star-Dust Expert Licensed User

    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
     
  16. udg

    udg Expert Licensed 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 likes this.
  17. Star-Dust

    Star-Dust Expert Licensed User

    Bella idea. E semplice da realizzare?
    Io firebase lo uso solo per AdMod
     
  18. LucaMs

    LucaMs Expert Licensed User

    Non è un'app che crea il file, ma una pagina php.
     
  19. LucaMs

    LucaMs Expert Licensed User

    Fatto in quel modo, concordo con @sirjo66 che l'unica soluzione sia il polling (che nemmeno a me piace).
     
  20. LucaMs

    LucaMs Expert Licensed User

    Sarebbe importante sapere se possiede un VPS o comunque la disponibilità del server oppure un classico spazio web (sospetto che sia quest'ultimo e penso che sarebbe meglio che passasse ad un VPS).
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice