w***@163.com
w***@163.com
  • 发布:2025-12-18 16:14
  • 更新:2025-12-18 16:15
  • 阅读:20

uniapp 安卓端有的页面需要禁止截屏 有的页面需要开启 这样会导致白屏 有什么解决办法吗

分类:uni-app

/**

  • 在 Android 上启用/禁用 FLAG_SECURE(防截屏)
  • 注意:仅在 App 端(Android)生效,H5/小程序/iOS 无效果
  • @param enabled 是否启用安全标志
    */
    let isSecureEnabled = false;

export function setSecureFlag(enabled: boolean): void {
if (typeof plus === 'undefined') return;
const sys = uni.getSystemInfoSync();
if (sys.platform !== 'android' || !sys.appName) return;

try {
const main = plus.android.runtimeMainActivity();
const window = main.getWindow();
const WindowManager = plus.android.importClass('android.view.WindowManager');
const FLAG_SECURE = WindowManager.LayoutParams.FLAG_SECURE;

// ✅ 优化点1:避免重复设置  
if (enabled === isSecureEnabled) return;  

if (enabled) {  
  plus.android.invoke(window, 'addFlags', FLAG_SECURE);  
} else {  
  plus.android.invoke(window, 'clearFlags', FLAG_SECURE);  
}  

isSecureEnabled = enabled; // ✅ 优化点2:记录状态  

} catch (err) {
console.warn('setSecureFlag failed:', err);
}
}

2025-12-18 16:14 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

针对uniapp安卓端动态切换截屏权限导致白屏的问题,结合知识库信息提供以下解决方案:

  1. 页面生命周期管理:在onShow中启用setSecureFlag(true),在onHide中恢复setSecureFlag(false),避免页面切换过程中频繁修改窗口标志。

  2. 添加延迟处理:修改FLAG_SECURE后添加100ms微延迟,让系统完成UI重绘:

    if (enabled) {  
    plus.android.invoke(window, 'addFlags', FLAG_SECURE);  
    setTimeout(() => { /* 触发页面重绘 */ }, 100);  
    } else {  
    // 同理  
    }
  3. 检查targetSdkVersion:知识库显示2.8.5版本修复了targetSdkVersion=29在Android10白屏问题,请确保:

    • HBuilderX升级至正式版4.85+
    • manifest.json中targetSdkVersion设为29或更高
  4. 避免重复操作:您代码中的isSecureEnabled状态判断已正确实现,需确保所有页面统一使用该状态管理。

  5. 特殊场景处理:若涉及nvue页面,参考知识库App-Android平台nvue相关修复中的白屏解决方案。

注意:鸿蒙平台不支持此功能,仅限Android使用。切换时白屏通常是系统UI重绘的正常现象,通过延迟处理可缓解。

内容为 AI 生成,仅供参考

要回复问题请先登录注册