Jetpack Compose-保持屏幕常亮

前言

自定义组件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import android.app.Activity
import android.view.WindowManager
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.ui.platform.LocalContext

@Composable
fun KeepScreenOn() {
val context = LocalContext.current
DisposableEffect(Unit) {
val window = (context as Activity).window
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
onDispose {
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
}
}
}

使用

1
KeepScreenOn()

Activity中设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class MainActivity : ComponentActivity() {
val TAG = "MainActivity"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
enableEdgeToEdge()
setContent {
MyApp()
}
}

override fun onDestroy() {
super.onDestroy()
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
}
}

主要是这个生效

1
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)

其中

enableEdgeToEdge() 就是 “一键开启透明系统栏 + 全屏布局” 的快捷方式,让你接下来只用关心 WindowInsets 的 padding,而不用再写繁琐的 Window 配置代码。