Italian funzionamento in standby

rossi carmine

Member
Licensed User
Salve sono nuovo del forum e volevo il vostro aiuto.
Sto realizzando un cronometro che ogni volta che finisce il tempo impostato, da un allarme e si riavvia automaticamente dello stesso tempo fino a quando non viene interrotto dall'utente. Con lo schermo acceso funziona ma quando lo metto in standby il conteggio si interrompe. Quindi ho usato un modulo di servizio dove ho messo StartServiceAt . Apparentemente funziona ma dopo un certo numero di volte che l'operazione viene eseguita , il tutto si interrompe . Come posso fare per non far interrompere il ciclo in standby?
 

udg

Expert
Licensed User
Longtime User
Ciao,

cerca "sticky service" nel forum.
Il punto di partenza è questo.
 

rossi carmine

Member
Licensed User
grazie per le risposte. Ho già usato "sticky service" ma il risultato è lo stesso . Il ciclo viene ripetuto per un certo numero di volte ma poi si interrompe, quando poi riaccendo lo schermo suona l'allarme. Nel modulo service ho inserito

#Region Service Attributes
#StartAtBoot: false
#StartCommandReturnValue: android.app.Service.START_STICKY
#End Region

non sò se servono altre istruzzione da aggiungere a #StartCommandReturnValue: android.app.Service.START_STICKY
 

udg

Expert
Licensed User
Longtime User
Per lo sticky service non serve altro.
Puoi provare anche l'opzione Service.StartForeground in modo da segnalare ad Android che il tuo codice è in foreground e non gradisce essere terminato.
Altra opzione è disabilitare lo standby, ma non ricordo se ci sono problemi e differenze tra le varie versioni di Android.

Se comprendo bene, la tua applicazione è pensata per emette un suono allo scadere di un determinato intervallo di tempo e ripetersi all'infinito finché non viene fermata con un apposito comando. La questione standby interviene indesiderata ad interrompere questo ciclo di cose.
 

rossi carmine

Member
Licensed User
scusa udg se non ho risposto prima, ma ho avuto problemi con la registrazione al forum.
Gioco a calcetto e non avendo il portiere dobbiamo fare i turni in porta , quindi ho ideato questa app .Ad inizio partita, una volta impostato il tempo (tempo in porta) e dato lo start , questa a fine conteggio da un allarme di 10 sec e poi riparte automaticamente,nuovamente, allo scadere del tempo dà l'allarme e poi riparte e cosi via fino a quando non viene fermata dall'utente. In questo modo nessun giocatore deve fermarsi per controllare il tempo o far ripartire il timer.
Ho inserito nel modulo di servizio Service.StartForeground nel seguente modo

Sub Service_Create
'operazioni varie
Notif.Initialize
Notif.Sound = False
Notif.Vibrate =True
Service.StartForeground(1,Notif)
End If
End Sub

ma stesso problema

Ho inserito Service.StartForeground anche in

Sub Service_Start (StartingIntent As Intent)
' operazioni varie
StartServiceAt("",DateTime.Now +tempo * DateTime.TicksPersecond, True)'
Service.StartForeground(1,Notif)
End Sub

non cambia niente.

Ho usato anche un timer al posto di StartServiceAt("",DateTime.Now +tempo * DateTime.TicksPersecond, True)'
ma non và

Disabilitare lo standby significa far consumare la batteria quindi volevo che funzionasse anche in standby

Con il display acceso funziona bene, ma quando và in stanby, dopo un certo numero di cicli con allarmi precisi , android rallenta o termina le operazioni di calcolo del modulo di servizio , quindi l'allarme o non viene dato o viene dato in ritardo.
C'è un'istruzione di B4A che obbliga android ad eseguire il modulo di servizio senza rallentarlo o terminarlo o a renderlo prioritario?
 

luciano deri

Active Member
Licensed User
Longtime User
Secondo me non c'è modo di mantenere viva una app con il dispositivo completamente in standby, che è graduale, prima spegne il display poi il resto dall'hardaware. Prova a fare còsì
B4X:
Dim pws As PhoneWakeState
Sub Activity_Create(FirstTime As Boolean)
..
'Dovrebbe consentire lo spegnimento del diplay ma non lo sleep della cpu. Altrimenti pws.KeepAlive(True)  che disabilita ogni funzione di risparmio energetico
pws.PartialLock
..
end sub
Sub Activity_ActionBarHomeClick
    pws.ReleasePartialLock
End Sub
 

rossi carmine

Member
Licensed User
ok le tue istruzioni sono giuste ho testato l'app per due ore e funziona perfettamente anche in standby.
continuerò a provarla.
Ti ringrazio per il tuo aiuto.
 
Top