Italian App in Background

fifiddu70

Well-Known Member
Licensed User
Longtime User
Ciao a tutti, all'interno di un sito web ho creato una cartella con all'interno un file htm ed uno php che alla ricezione di un numero questi crea un file di testo txt con il numero all'interno, a questo punto ho creato una app che riceve questi numeri suddivisi in 4 lettere, ad esempio numeri con la lettera A ( A10 etc.. ) numeri con lettera B, C, D,
questi numeri vengono poi visti all'interno di 4 caselle di testo rispettivamente una per lettera, la mia necessità è di realizzare una funzione che sia capace di far lavorare l'app in background tipo in service, poi vorrei fare il confronto tra uno dei 4 numeri con un numero da me inserito in una casella di testo per il confronto, se il numero corrisponde ad una dei 4 numeri ricevuti attraverso il modulo http allora questo da background dovrebbe svegliarsi e suonare il telefono avvisandoci del numero ricevuto corrispomndente a quello da noi memorizzato prima, l'unica mia difficoltà sta nel far funzionare in background l'app, il resto dovrei riuscire a farlo funzionare, ho provato con il codice qui sotto ma ovviamente si sente la radio in background e questo non va benee poi appena dovrebbe suonare questi non suona, sapete darmi un aiuto su come far funzionare bene l'app anche in bacgkround?
Qui sotto il codice sperimentale da me usato.

B4X:
'Code module
#Region  Project Attributes
    #ApplicationLabel: Numerazione
    #Version: 1.0.0
    'Orientation possible values: Portrait, LandscapeLeft, LandscapeRight and PortraitUpsideDown
    #iPhoneOrientations: Portrait
    #iPadOrientations: Portrait
    #Target: iPhone, iPad
    #ATSEnabled: False
    #MinVersion: 8
    
    
#End Region
#PlistExtra: <key>UIBackgroundModes</key><array><string>audio</string></array>

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'Public variables can be accessed from all modules.
    
    Public App As Application
    Public NavControl As NavigationController
    Private Page1 As Page
    Private hc As HttpClient
    Dim timer1 As Timer
    Dim timer2 As Timer
    Dim timer3 As Timer
    Dim timer4 As Timer
    
    
    Private lblmessagerx As Label
    Private txtmessagerx As TextField
    Private lblmessagerx2 As Label
    Private txtmessagerx2 As TextField
    Private txtmessagerx3 As TextField
    Private txtmessagerx4 As TextField
    Private lblmessagerx3 As Label
    Private lblmessagerx4 As Label
    Private pnlchiamata As Panel
    Private pnlselect As Panel
    Private txta As TextField
    Private txtb As TextField
    Private txtc As TextField
    Private txtd As TextField
    Private lblselectinfo As Label
    Private NativeMe As NativeObject
    Private vv As VideoView
    Private vv2 As VideoView
    Private btnstop As Button
    Private btnreturn As Button
    Private btnvainumeri As Button
    Private btnbackchiamata As Button
    Private locManager As LocationManager
    Private lblcount As Label
    Private lblcarico As Label
End Sub

Private Sub Application_Start (Nav As NavigationController)
    'SetDebugAutoFlushLogs(True) 'Uncomment if program crashes before all logs are printed.
    NativeMe = Me
    NavControl = Nav
    Page1.Initialize("Page1")
    Page1.Title = "Turn And go View"
    Page1.RootPanel.Color = Colors.White
    Page1.RootPanel.LoadLayout("turnandgoview")
    NavControl.ShowPage(Page1)
    locManager.Initialize("locManager")
    
    
    Dim job As HttpJob
    job.Initialize("j", Me)
    
    hc.Initialize("hc")
    timer1.Initialize("timer1",8000)
    timer2.Initialize("timer2",8000)
    timer3.Initialize("timer3",8000)
    timer4.Initialize("timer4",8000)
    
    timer1.Enabled=True
    timer2.Enabled=True
    timer3.Enabled=True
    timer4.Enabled=True
    
    pnlselect.Initialize("pnlselect")
    pnlselect.Color=Colors.Cyan
    
    pnlchiamata.Initialize("pnlchiamata")
    pnlchiamata.Color=Colors.Cyan
    
    lblselectinfo.Initialize("lblselectinfo")
    lblselectinfo.Text="Inesrisci ad esempio due numeri prima del tuo prelevato nella lettera corrispondente e premi il tasto home per attendere di essere chiamato prima del tuo turno."
    lblselectinfo.TextAlignment = lblselectinfo.Top
    lblselectinfo.TextAlignment = lblselectinfo.ALIGNMENT_CENTER
    lblselectinfo.Multiline = True
    lblselectinfo.Font = Font.CreateNew(14)
    
    txta.Initialize("txta")
    txta.KeyboardType = txta.TYPE_NUMBER_PAD
    txta.Font=Font.CreateNew(35)
    txta.Text="A"
    
    txtb.Initialize("txta")
    txtb.KeyboardType = txtb.TYPE_NUMBER_PAD
    txtb.Font=Font.CreateNew(35)
    txtb.Text="B"
    
    txtc.Initialize("txtc")
    txtc.KeyboardType = txtc.TYPE_NUMBER_PAD
    txtc.Font=Font.CreateNew(35)
    txtc.Text="C"
    
    txtd.Initialize("txtd")
    txtd.KeyboardType = txtd.TYPE_NUMBER_PAD
    txtd.Font=Font.CreateNew(35)
    txtd.Text="D"
    
    btnstop.Initialize("btnstop", btnstop.STYLE_SYSTEM)
    btnstop.Text = "STOP"
    btnstop.SetBorder(2,Colors.Black,8)
    btnstop.SetShadow(Colors.Black,3,3,1,True)
    btnstop.Color= Colors.LightGray
    
    btnreturn.Initialize("btnreturn", btnreturn.STYLE_SYSTEM)
    btnreturn.Text = "RESET"
    btnreturn.SetBorder(2,Colors.Black,8)
    btnreturn.SetShadow(Colors.Black,3,3,1,True)
    btnreturn.Color= Colors.LightGray
    btnreturn.Color= Colors.LightGray
    
    btnvainumeri.Initialize("btnvainumeri", btnvainumeri.STYLE_SYSTEM)
    btnvainumeri.Text = "VEDI NUMERO CHIAMATO IN CORSO"
    btnvainumeri.SetBorder(2,Colors.Black,8)
    btnvainumeri.SetShadow(Colors.Black,3,3,1,True)
    btnvainumeri.Color= Colors.LightGray
    
    btnbackchiamata.Initialize("btnbackchiamata", btnbackchiamata.STYLE_SYSTEM)
    btnbackchiamata.Text = "INDIETRO"
    btnbackchiamata.SetBorder(2,Colors.Black,8)
    btnbackchiamata.SetShadow(Colors.Black,3,3,1,True)
    btnbackchiamata.Color= Colors.LightGray
    btnbackchiamata.Color= Colors.LightGray
    
    lblcarico.Initialize("lblcarico")
    lblcarico.Text="Attendere caricamento in corso..."
    lblcarico.Font = Font.CreateNew(20)
    lblcarico.TextAlignment = lblcarico.ALIGNMENT_CENTER
    
    lblmessagerx.Initialize("lblmessagerx")
    lblmessagerx.Font = Font.CreateNew(50)
    lblmessagerx.TextAlignment = lblmessagerx.Top
    lblmessagerx.TextAlignment = lblmessagerx.ALIGNMENT_LEFT
    
    lblmessagerx2.Initialize("lblmessagerx2")
    lblmessagerx2.Font = Font.CreateNew(50)
    lblmessagerx2.TextAlignment = lblmessagerx2.Top
    lblmessagerx2.TextAlignment = lblmessagerx2.ALIGNMENT_LEFT
    
    lblmessagerx3.Initialize("lblmessagerx3")
    lblmessagerx3.Font = Font.CreateNew(50)
    lblmessagerx3.TextAlignment = lblmessagerx3.Top
    lblmessagerx3.TextAlignment = lblmessagerx3.ALIGNMENT_LEFT
    
    lblmessagerx4.Initialize("lblmessagerx4")
    lblmessagerx4.Font = Font.CreateNew(50)
    lblmessagerx4.TextAlignment = lblmessagerx4.Top
    lblmessagerx4.TextAlignment = lblmessagerx4.ALIGNMENT_LEFT
    
    Page1.RootPanel.AddView(pnlselect,0%x,0%y,100%x,100%y)
    Page1.RootPanel.AddView(lblselectinfo, 1%x, 0%y, 98%x, 19%y)
    Page1.RootPanel.AddView(txta, 1%x, 16%y, 40%x, 9%y)
    Page1.RootPanel.AddView(txtb, 58%x, 16%y, 40%x, 9%y)
    Page1.RootPanel.AddView(txtc, 1%x, 27%y, 40%x, 9%y)
    Page1.RootPanel.AddView(txtd, 58%x, 27%y, 40%x, 9%y)
    Page1.RootPanel.AddView(btnstop, 22%x, 39%y, 25%x, 10%y)
    Page1.RootPanel.AddView(btnreturn, 1%x, 39%y, 20%x, 10%y)
    Page1.RootPanel.AddView(btnvainumeri, 50%x, 39%y, 48%x, 10%y)
    
    Page1.RootPanel.AddView(pnlchiamata,0%x,0%y,100%x,100%y)
    Page1.RootPanel.AddView(lblcarico, 1%x, 1%y, 98%x, 10%y)
    Page1.RootPanel.AddView(lblmessagerx, 1%x, 11%y, 40%x, 10%y)
    Page1.RootPanel.AddView(lblmessagerx2, 58%x, 11%y, 40%x, 10%y)
    Page1.RootPanel.AddView(lblmessagerx3, 1%x, 22%y, 40%x, 10%y)
    Page1.RootPanel.AddView(lblmessagerx4, 58%x, 22%y, 40%x, 10%y)
    Page1.RootPanel.AddView(btnbackchiamata, 1%x, 35%y, 98%x, 10%y)
    
    
    pnlchiamata.Visible=False
    lblmessagerx.Visible=False
    lblmessagerx2.Visible=False
    lblmessagerx3.Visible=False
    lblmessagerx4.Visible=False
    btnbackchiamata.Visible=False
    lblcarico.Visible=False
    
    
End Sub

private Sub Application_Foreground
    
End Sub
Private Sub Page1_Resize(Width As Int, Height As Int)
    
End Sub

Private Sub Application_Background
    
    Log("Suca")
    
End Sub

Sub timer1_Tick
    Log("sono sulla sub timer1 di main")
    Dim job As HttpJob
    job.Initialize("Job", Me)
    job.Download("http://www.xxxxx.xxxx/xxxxx/xxxxx/NumeroA.txt")
    
    
End Sub

Sub timer2_Tick
    Log("sono sulla sub timer2 di main")
    Dim job As HttpJob
    job.Initialize("Job", Me)
    job.Download("http://www.xxxxx.xxxx/xxxxx/xxxxx/NumeroB.txt")
    
    
End Sub

Sub timer3_Tick
    Log("sono sulla sub timer3 di main")
    Dim job As HttpJob
    job.Initialize("Job", Me)
    job.Download("http://www.xxxxx.xxxx/xxxxx/xxxxx/NumeroC.txt")
    
    
End Sub

Sub timer4_Tick
    Log("sono sulla sub timer4 di main")
    Dim job As HttpJob
    job.Initialize("Job", Me)
    job.Download("http://www.xxxxx.xxxx/xxxxx/xxxxx/NumeroD.txt")
    
    
End Sub

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
                    lblmessagerx.Text=txtmessagerx.Text
                    If job.GetString = txta.Text Then
                        CallSub(Me,"suona2")
                        CallSub(Me,"suona")
                    End If
                else if txtmessagerx.Text.StartsWith("B") Then
                    lblmessagerx2.Text=txtmessagerx.Text
                    If job.GetString = txtb.Text Then
                        CallSub(Me,"suona2")
                        CallSub(Me,"suona")
                    End If
                else if txtmessagerx.Text.StartsWith("C") Then
                    lblmessagerx3.Text=txtmessagerx.Text
                    If job.GetString = txtc.Text Then
                        CallSub(Me,"suona2")
                        CallSub(Me,"suona")
                    End If
                else if txtmessagerx.Text.StartsWith("D") Then
                    lblmessagerx4.Text=txtmessagerx.Text
                    If job.GetString = txtd.Text Then
                        CallSub(Me,"suona2")
                        CallSub(Me,"suona")
                    End If
                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
Sub suona
    
    NativeMe.RunMethod("setAudioSession", Null)
    vv.Initialize("vv")
    'vv.LoadVideo(File.DirAssets,"turno.mp3")
    vv.LoadVideoUrl("http://stream-dc1.radioparadise.com/mp3-32")
    vv.Play
    NativeMe.RunMethod("register", Null)
    NavControl.ShowPage(Page1)
    
End Sub

Sub suona2
    
    NativeMe.RunMethod("setAudioSession", Null)
    vv2.Initialize("vv2")
    'vv2.LoadVideo(File.DirAssets,"mute.mp3")
    vv.LoadVideoUrl("http://stream-dc1.radioparadise.com/mp3-32")
    vv2.Play
    NativeMe.RunMethod("register", Null)
    NavControl.ShowPage(Page1)
    
End Sub

Public Sub ControlEvent (Command As String)
    Select Command
        Case "play"
            vv.Play
        Case "pause"
            vv.Pause
            Case "stop"
                vv.Stop
    End Select
End Sub



#If OBJC
@import MediaPlayer;
#import <AVFoundation/AVFoundation.h>
#import <AudioToolbox/AudioToolbox.h>
- (void)setAudioSession {
  AVAudioSession *audioSession = [AVAudioSession sharedInstance];
  NSError *err = nil;
  BOOL success = [audioSession setCategory:AVAudioSessionCategoryPlayback error:&err];
  if (success) {
     success = [audioSession setActive:YES error:&err];
   success = [audioSession setPreferredSampleRate:4096 error:nil];
   [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
  }
  if (!success)
  [NSException raise:@"" format:@"Error setting audio session: %@", err];
}
- (void)register {
   MPRemoteCommandCenter* center = [MPRemoteCommandCenter sharedCommandCenter];
   center.playCommand.enabled = true;
   center.pauseCommand.enabled = true;
   [center.playCommand addTarget:self action:@selector(play)];
   [center.pauseCommand addTarget:self action:@selector(pause)];
}
- (void) play {
   NSLog(@"test");
   [self.bi raiseEvent:nil event:@"controlevent:"  params:@[@"play"]];
}
- (void) pause {
   [self.bi raiseEvent:nil event:@"controlevent:"  params:@[@"pause"]];
}

#end if
Sub txtmessagerx_TextChanged (Old As String, New As String)
    If txtmessagerx.Text = Old Then
        
    Else
    
        Log("vai sulla sub Creafile")
    End If
End Sub

Sub btnbackchiamata_Click
    pnlchiamata.Visible=False
    lblmessagerx.Visible=False
    lblmessagerx2.Visible=False
    lblmessagerx3.Visible=False
    lblmessagerx4.Visible=False
    btnbackchiamata.Visible=False
    lblcarico.Visible=False
    
    pnlselect.Visible=True
    txta.Visible=True
    txtb.Visible=True
    txtc.Visible=True
    txtd.Visible=True
    btnreturn.Visible=True
    btnstop.Visible=True
    btnvainumeri.Visible=True
End Sub

Sub btnvainumeri_cLICK
    pnlchiamata.Visible=True
    lblmessagerx.Visible=True
    lblmessagerx2.Visible=True
    lblmessagerx3.Visible=True
    lblmessagerx4.Visible=True
    btnbackchiamata.Visible=True
    lblcarico.Visible=True
    
    pnlselect.Visible=False
    txta.Visible=False
    txtb.Visible=False
    txtc.Visible=False
    txtd.Visible=False
    btnreturn.Visible=False
    btnstop.Visible=False
    btnvainumeri.Visible=False
End Sub
Sub btnstop_Click
    vv.Stop
    txta.Text=""
    txtb.Text=""
    txtc.Text=""
    txtd.Text=""
    txta.Text="A"
    txtb.Text="B"
    txtc.Text="C"
    txtd.Text="D"
    
End Sub


Sub imgreturn_Click
    txta.Text=""
    txtb.Text=""
    txtc.Text=""
    txtd.Text=""
    txta.Text="A"
    txtb.Text="B"
    txtc.Text="C"
    txtd.Text="D"
End Sub
 

Star-Dust

Expert
Licensed User
Longtime User
Chiedi ancora dell'App taglia code?
 
Last edited:

fifiddu70

Well-Known Member
Licensed User
Longtime User
si, praticamente sono alla fine dei lavori, mi manca solo la versione per iphone, ho già tutto pronto per android e per poter finire i lavori devo ultimare la versione iphone.
 

Star-Dust

Expert
Licensed User
Longtime User
quindi la tua domanda è per iphone?

Non fai andare L'App in background in questo modo su iOS
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
ma esiste un modo per fare funzionare tutto in background ? in pratica deve poter ricevere i numeri chiamati in background e appena corrisponde deve svegliarsi e suonare avvisandoci del numero appena chiamato., da quel che ho capito in iphone non c'è modo di far funzionare in background l'app o per capirci come il modulo service di android, e quindi avevo trovato questo codice che sfrutta la radio streaming per rimanere attiva e non essere uccisa dal sistema.
 

Star-Dust

Expert
Licensed User
Longtime User
ma esiste un modo per fare funzionare tutto in background ? in pratica deve poter ricevere i numeri chiamati in background e appena corrisponde deve svegliarsi e suonare avvisandoci del numero appena chiamato., da quel che ho capito in iphone non c'è modo di far funzionare in background l'app o per capirci come il modulo service di android, e quindi avevo trovato questo codice che sfrutta la radio streaming per rimanere attiva e non essere uccisa dal sistema.
Si, ma è complicato devi alzare di livello la tua programmazione che a quanto vedo da codice che hai postato ancora da poco più che newbie,
Ma nel forum trovi qualcosa scritto da Erel in merito, fai qualche ricerca.
 

Star-Dust

Expert
Licensed User
Longtime User
Ma non avevi cambiato lavoro?
 

fifiddu70

Well-Known Member
Licensed User
Longtime User
Ho fatto il tecnico dei flipper da dicembre fino a fine maggio poi non so se mi rinnoveranno il contratto.
 

Star-Dust

Expert
Licensed User
Longtime User
esistono ancora i flipper da voi in Italia?

Non lavori mica da GameStop?
 
Last edited:

fifiddu70

Well-Known Member
Licensed User
Longtime User
no, chi sono gamestop? magari se cercano personale posso fare domanda, io fine settimana mi scade il contratto.
 

Star-Dust

Expert
Licensed User
Longtime User

fifiddu70

Well-Known Member
Licensed User
Longtime User
Si, infatti prossima settimana sarò dinuovo a Partanna, in attesa di trovar lavoro.
 
Top