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