如何在Trusted Web Activity中保持屏幕常亮?
解决方案:可信标签页(Trusted Tabs)保持屏幕常亮
你的代码无效的核心原因是使用了错误的WakeLock类型:PARTIAL_WAKE_LOCK仅保证CPU持续运行,不会控制屏幕状态。以下是可行的修复方案:
方案1:使用正确的WakeLock类型(需权限)
步骤1:添加权限
在AndroidManifest.xml中声明WAKE_LOCK权限:
<uses-permission android:name="android.permission.WAKE_LOCK" />
步骤2:替换WakeLock代码并绑定生命周期
将原代码替换为控制屏幕的锁类型,并在Activity生命周期中正确管理锁的获取与释放:
private PowerManager.WakeLock wakeLock; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); // SCREEN_BRIGHT_WAKE_LOCK 保持屏幕高亮,ACQUIRE_CAUSES_WAKEUP 可唤醒休眠的屏幕 wakeLock = powerManager.newWakeLock( PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TrustedTab:WakelockTag" ); } @Override protected void onResume() { super.onResume(); // 10分钟超时自动释放 wakeLock.acquire(10 * 60 * 1000L); } @Override protected void onPause() { super.onPause(); if (wakeLock.isHeld()) { wakeLock.release(); } }
方案2:使用FLAG_KEEP_SCREEN_ON(无需权限,推荐)
Android提供了更简洁的屏幕常亮方案,无需申请WAKE_LOCK权限,直接通过Window标记实现:
@Override protected void onResume() { super.onResume(); // 添加屏幕常亮标记 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } @Override protected void onPause() { super.onPause(); // 移除标记,恢复正常屏幕休眠 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); }
针对Trusted Tabs的特殊注意事项
如果你的Trusted Tabs是通过Chrome Custom Tabs实现,WebViewFallbackActivity仅在用户未安装Chrome时才会触发。若要覆盖Chrome内核的标签页,需在启动CustomTabsIntent时添加屏幕常亮标记:
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(); CustomTabsIntent customTabsIntent = builder.build(); // 给Chrome的标签页添加屏幕常亮标记 customTabsIntent.intent.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); customTabsIntent.launchUrl(this, Uri.parse("你的可信URL"));
内容的提问来源于stack exchange,提问作者Alireza
相关产品推荐
相关产品推荐

