2. Intents with actions that are defined in the manifest editor. For example, if we want to run something after boot:
Volevo evitare di usare il menù di avvio automatico del dispositivo, alcuni hanno questa opzione e altri no, per cui preferirei utilizzare del codice attraverso la mia appCos'hanno le impostazioni di avvio di Android che non ti va bene?
Ok leggoDovrebbe bastarti:
https://www.b4x.com/android/forum/threads/receivers-and-services-in-2023.145370/#content
In particolare:
#Region Service Attributes
#StartAtBoot: true
#ExcludeFromLibrary: True
#End Region
Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
End Sub
Sub Service_Create
'This is the program entry point.
'This is a good place to load resources that are not specific to a single activity.
StartActivity(Main)
End Sub
Sub Service_Start (StartingIntent As Intent)
Service.StopAutomaticForeground 'Starter service can start in the foreground state in some edge cases.
End Sub
Sub Service_TaskRemoved
'This event will be raised when the user removes the app from the recent apps list.
End Sub
'Return true to allow the OS default exceptions handler to handle the uncaught exception.
Sub Application_Error (Error As Exception, StackTrace As String) As Boolean
Return True
End Sub
Sub Service_Destroy
End Sub
Anche ora con le B4XPages funziona, il problema è che se chiudi l'app questa dopo qualche secondo si riapre, mi sa che bisogna metterci un servizio aggiuntivo che funziona solo una volta poi si stoppaERA necessario e sufficiente StartAtBoot nel servizio Starter.
Sub Process_Globals
' Questa è la chiave che identifica l'intento di avvio del dispositivo
Dim ACTION_BOOT_COMPLETED As String
ACTION_BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED"
End Sub
'Receiver evento di avvio del dispositivo
Sub Service_Start (StartingIntent As Intent)
If StartingIntent.Action = ACTION_BOOT_COMPLETED Then
'L'azione di avvio del dispositivo è stata ricevuta
'Qui puoi avviare l'applicazione o eseguire altre azioni necessarie
StartServiceAt(Me, DateTime.Now + 10000, False) 'Esempio: avvia il servizio dopo 10 secondi
End If
End Sub
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<receiver android:name=".Boot">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>
#Region Service Attributes
[B]#StartAtBoot: true[/B]
#End Region
Sub Process_Globals
End Sub
Sub Service_Create
[B] StartActivity(Main)[/B]
End Sub
Sub Service_Start (StartingIntent As Intent)
Service.StopAutomaticForeground 'Call this when the background task completes (if there is one)
End Sub
Sub Service_Destroy
End Sub
In effetti non dovrebbe. Cosa ci hai scritto?Non ho capito però perché starter viene richiamato quando chiudo l'app e quindi la riapre, mentre un servizio nuovo che creo parte solo all'avvio di android e poi non si ripete più
#Region Service Attributes
[B]#StartAtBoot: true[/B]
#End Region
Sub Process_Globals
End Sub
Sub Service_Create
[B] StartActivity(Main)[/B]
End Sub
Sub Service_Start (StartingIntent As Intent)
Service.StopAutomaticForeground 'Call this when the background task completes (if there is one)
End Sub
Sub Service_Destroy
End Sub
Scrivendoci le stesse cose e senza un modulo receiver?Questo sopra, funziona solo all'avvio di android ed è quello che ho bisogno.
Se uso starter chiudo l'app e dopo 5 secondi si riapre
Così come lo vedi funziona accendo il telefono e parte l'app dopo 10 secondi circa.Scrivendoci le stesse cose e senza un modulo receiver?
Sì, lo avevo capito, ma hai detto:Così come lo vedi funziona accendo il telefono e parte l'app dopo 10 secondi circa.
L'ho chiamato AutoStart
Questo ti succede se scrivi quello stesso codice nello Starter (ovviamente senza un altro servizio)? E senza aggiungere un modulo receiver?Se uso starter chiudo l'app e dopo 5 secondi si riapre