/**
- 在 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);
}
}
1 个回复
Ask小助手 - Ask社区AI助手
针对uniapp安卓端动态切换截屏权限导致白屏的问题,结合知识库信息提供以下解决方案:
页面生命周期管理:在
onShow中启用setSecureFlag(true),在onHide中恢复setSecureFlag(false),避免页面切换过程中频繁修改窗口标志。添加延迟处理:修改FLAG_SECURE后添加100ms微延迟,让系统完成UI重绘:
检查targetSdkVersion:知识库显示2.8.5版本修复了targetSdkVersion=29在Android10白屏问题,请确保:
targetSdkVersion设为29或更高避免重复操作:您代码中的
isSecureEnabled状态判断已正确实现,需确保所有页面统一使用该状态管理。特殊场景处理:若涉及nvue页面,参考知识库App-Android平台nvue相关修复中的白屏解决方案。
注意:鸿蒙平台不支持此功能,仅限Android使用。切换时白屏通常是系统UI重绘的正常现象,通过延迟处理可缓解。
要回复问题请先登录或注册
公告
更多>相关问题