You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Kotlin实现App中任意Activity或Fragment保持屏幕常亮?

在Kotlin中实现特定Activity/Fragment保持屏幕常亮的方法

一、针对Activity的实现

有三种常用方式,按需选择:

  1. XML清单配置(最简单,适合固定需要常亮的页面)
    在AndroidManifest.xml中对应Activity标签添加属性:
<activity
    android:name=".KeepScreenOnActivity"
    android:keepScreenOn="true" />
  1. 代码动态设置Window Flag
    在Activity的onCreate方法中添加:
class KeepScreenOnActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_keep_screen_on)
        
        window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
    }
}

如果需要动态关闭常亮,调用window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)即可。

  1. 布局View设置(推荐,无需手动管理生命周期)
    给布局中的任意View(通常是根布局)添加android:keepScreenOn="true"属性:
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:keepScreenOn="true">
    
    <!-- 页面内容 -->
</androidx.constraintlayout.widget.ConstraintLayout>

系统会自动在View可见时保持屏幕常亮,不可见时取消,无需额外代码。


二、针对Fragment的实现

Fragment没有独立Window,可通过以下两种方式实现:

  1. 通过Fragment根View设置(推荐)
    在onViewCreated中给根View设置keepScreenOn属性:
class KeepScreenOnFragment : Fragment() {
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        // 根View设置后,跟随Fragment生命周期自动管理
        view.keepScreenOn = true
    }
}
  1. 通过关联Activity的Window设置
    如果需要通过Window Flag控制,记得在Fragment销毁时清除Flag,避免影响其他页面:
class KeepScreenOnFragment : Fragment() {
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        requireActivity().window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
    }
    
    override fun onDestroyView() {
        super.onDestroyView()
        requireActivity().window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
    }
}

注意事项

  • 优先使用android:keepScreenOn属性(清单或布局),无需申请权限,系统自动管理生命周期,比WakeLock更安全高效。
  • 不要滥用WakeLock,它需要android.permission.WAKE_LOCK权限,且容易忘记释放导致电量浪费。

内容的提问来源于stack exchange,提问作者Fahad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 09:33:20