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

如何阻止Android TV中Web封装应用触发屏幕保护程序?

如何阻止Android TV Web封装应用触发屏幕保护程序

你添加的FLAG_KEEP_SCREEN_ON只能防止屏幕熄灭,但无法阻止Android TV系统的屏幕保护程序(由DreamService驱动)启动。以下是几种可行的解决方案:


1. 使用PowerManager WakeLock(推荐)

WakeLock可以让CPU和屏幕保持活跃,直接阻止系统触发屏保,无需用户额外授权。

步骤:

  • 首先在AndroidManifest.xml中添加权限:
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    
  • 在Activity中实现WakeLock的获取与释放:
    private PowerManager.WakeLock mWakeLock;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        startWebview();
        Objects.requireNonNull(getSupportActionBar()).hide();
        generateUniqueIdentifier();
    
        // 初始化WakeLock
        PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
        mWakeLock = powerManager.newWakeLock(
            PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP,
            "MyTVApp:KeepScreenAwakeTag"
        );
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        
        // 激活WakeLock
        if (mWakeLock != null && !mWakeLock.isHeld()) {
            mWakeLock.acquire();
        }
    
        // WebView系统UI设置
        if (mWebView != null) {
            mWebView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
                    | View.SYSTEM_UI_FLAG_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
        }
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        
        // 释放WakeLock,避免不必要的耗电
        if (mWakeLock != null && mWakeLock.isHeld()) {
            mWakeLock.release();
        }
    }
    

2. 直接禁用系统屏保(需要用户授权)

通过修改系统设置关闭屏保,但需要申请特殊权限,且用户需手动授权。

步骤:

  • 在AndroidManifest.xml中添加权限:
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    
  • 在Activity中实现设置修改:
    @Override
    protected void onResume() {
        super.onResume();
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    
        // 尝试禁用系统屏保
        if (Settings.System.canWrite(this)) {
            Settings.System.putInt(getContentResolver(), Settings.System.SCREENSAVER_ENABLED, 0);
        } else {
            // 引导用户授权修改系统设置
            Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
            intent.setData(Uri.parse("package:" + getPackageName()));
            startActivity(intent);
        }
    
        // WebView系统UI设置...
    }
    

3. 模拟WebView用户交互

如果系统因WebView长时间无交互触发屏保,可以定期模拟用户触摸事件,让系统认为应用处于活跃状态。

代码示例:

private Handler mHandler = new Handler();
private Runnable mKeepAliveRunnable = new Runnable() {
    @Override
    public void run() {
        if (mWebView != null) {
            // 模拟空的触摸事件
            MotionEvent downEvent = MotionEvent.obtain(SystemClock.uptimeMillis(), 
                SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 0, 0, 0);
            mWebView.dispatchTouchEvent(downEvent);
            downEvent.recycle();

            MotionEvent upEvent = MotionEvent.obtain(SystemClock.uptimeMillis(), 
                SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, 0, 0, 0);
            mWebView.dispatchTouchEvent(upEvent);
            upEvent.recycle();
        }
        // 每隔5分钟触发一次
        mHandler.postDelayed(this, 300000);
    }
};

@Override
protected void onResume() {
    super.onResume();
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    mHandler.post(mKeepAliveRunnable);
    // WebView系统UI设置...
}

@Override
protected void onPause() {
    super.onPause();
    mHandler.removeCallbacks(mKeepAliveRunnable);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:56:31