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

Android TWA应用(Bubblewrap打包PWA)实现屏幕常亮方案咨询

实现TWA应用屏幕常亮的两种方案

方案一:Web端JavaScript实现(无需修改Android代码)

你之前认为Web端无解决方案是误解,实际上可以使用Screen Wake Lock API直接在PWA中实现屏幕常亮,这是最简便的方式:

let wakeLock = null;

// 请求屏幕常亮锁
async function requestWakeLock() {
  try {
    wakeLock = await navigator.wakeLock.request('screen');
    // 监听锁释放事件
    wakeLock.addEventListener('release', () => {
      wakeLock = null;
    });
  } catch (err) {
    console.error('请求屏幕常亮失败:', err);
  }
}

// 页面切换到前台时重新请求锁
document.addEventListener('visibilitychange', () => {
  if (document.visibilityState === 'visible' && !wakeLock) {
    requestWakeLock();
  }
});

// 页面加载完成后立即请求(如果页面可见)
if (document.visibilityState === 'visible') {
  requestWakeLock();
}

说明:

  • 该API仅支持HTTPS环境(PWA默认满足)
  • 页面切换到后台时,系统会自动释放锁,避免浪费电量
  • 无需额外权限,符合Web标准

方案二:Android端代码修改

由于TWA的实际内容由Chrome浏览器渲染,直接在LauncherActivity中设置keepScreenOn无效(LauncherActivity启动TWA后会进入后台),需通过以下方式实现:

1. 自定义LauncherActivity传递屏幕常亮Flag

在项目的app/src/main/java/[你的包名]/LauncherActivity.java中修改代码(若无此文件则创建):

import android.content.Intent;
import android.view.WindowManager;
import com.google.androidbrowserhelper.trusted.LauncherActivity;

public class LauncherActivity extends LauncherActivity {
    @Override
    protected Intent getLaunchingIntent() {
        Intent intent = super.getLaunchingIntent();
        // 给Chrome的启动Intent添加屏幕常亮Flag
        intent.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        return intent;
    }
}

2. 给WebView fallback页面添加常亮配置

如果你的TWA启用了WebView fallback,在AndroidManifest.xml中修改对应Activity配置:

<activity android:name="com.google.androidbrowserhelper.trusted.WebViewFallbackActivity"
    android:configChanges="orientation|screenSize"
    android:keepScreenOn="true" />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:25:48