Alcune app, come i giochi o le app di film, devono mantenere lo schermo acceso. Alcune API Android mantengono automaticamente lo schermo acceso. In altri casi, puoi utilizzare un modificatore di Compose o impostare un flag per mantenere lo schermo acceso manualmente.
Mantieni lo schermo attivo in Compose
Se la tua app utilizza Jetpack Compose, applica il modificatore keepScreenOn a un
componibile. Il modificatore è disponibile in Compose UI 1.9.0 e versioni successive. Lo schermo rimane acceso finché il modificatore fa parte della composizione. Quando nessun componibile utilizza il modificatore, Compose interrompe automaticamente l'attivazione dello schermo.
Per mantenere lo schermo acceso solo in alcuni casi, applica il modificatore in modo condizionale. L'esempio seguente mantiene lo schermo acceso solo durante la riproduzione di un video:
@Composable fun VideoPlayer(isPlaying: Boolean, modifier: Modifier = Modifier) { Box( modifier = modifier // Keep the screen on only while the video plays. .then(if (isPlaying) Modifier.keepScreenOn() else Modifier) ) { // Video surface and playback controls. } }
Il modificatore imposta la stessa proprietà di visualizzazione dell'attributo android:keepScreenOn descritto nella sezione successiva, in modo che lo schermo rimanga acceso solo mentre la finestra dell'app è visibile. Non cancella un flag FLAG_KEEP_SCREEN_ON impostato dall'app nella finestra.
Mantieni lo schermo attivo manualmente
Per mantenere attivo lo schermo del dispositivo, imposta il flag FLAG_KEEP_SCREEN_ON nella tua attività. Questo flag può essere impostato solo in un'attività, mai in un servizio o in un altro componente dell'app. Ad esempio:
class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) } }
Un altro modo per mantenere lo schermo attivo è impostare l'attributo android:keepScreenOn nel file XML di layout dell'applicazione:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:keepScreenOn="true"> ... </RelativeLayout>
L'utilizzo di android:keepScreenOn="true" equivale all'utilizzo di FLAG_KEEP_SCREEN_ON.
Puoi utilizzare l'approccio più adatto alla tua app. Il vantaggio di impostare
il flag in modo programmatico nella tua attività è che ti offre la possibilità di
cancellarlo in un secondo momento, consentendo così lo spegnimento dello
schermo.
Se un'app con il flag FLAG_KEEP_SCREEN_ON passa in background, il sistema consente allo schermo di spegnersi normalmente. In questo caso, non è necessario cancellare esplicitamente il flag. Se la tua app non ha più bisogno di tenere lo schermo acceso, devi cancellare il flag chiamando clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON).
Modalità Ambient per la TV
Sui dispositivi TV, utilizza FLAG_KEEP_SCREEN_ON per impedire al dispositivo di passare alla modalità Ambient durante la riproduzione attiva di video. Se l'attività in primo piano
non imposta FLAG_KEEP_SCREEN_ON, il dispositivo entra automaticamente in modalità Ambient
dopo un periodo di inattività.