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
相关产品推荐
相关产品推荐

