避免运用被截图是一个比较常见的需求,主要是出于安全考虑。下面将分别为iOS(苹果体系)、Android(安卓体系)及HarmonyOS(鸿蒙体系)供给避免截屏的办法和示例代码。
在企业内部运用的运用中,避免职工歹意截屏是一个重要的安全需求。本文将详细介绍iOS、Android和鸿蒙体系的避免截屏的办法,并供给相应的代码示例,以帮助代码初学者理解和完成该功用。
iOS体系避免截屏办法:
在iOS体系中,能够经过设置UIWindow的windowLevel为UIWindowLevelNormal + 1,使运用窗口掩盖在截屏窗口之上,从而阻挠截屏。以下是Objective-C和Swift两种语言的代码示例:
- iOS体系避免截屏
在iOS中,能够运用UIScreen的isCaptured特点来检测屏幕是否被录制或截图。为了避免截屏,你能够监听UIScreenCapturedDidChange告诉,当屏幕开始被捕获时,你能够做一些操作,比如模糊视图或显现一个全屏的安全警告。
swift
//注册屏幕捕获变化告诉
NotificationCenter.default.addObserver(
self,
selector:#selector(screenCaptureChanged),
name:UIScreen.capturedDidChangeNotification,
object:nil
)
@objcfuncscreenCaptureChanged(notification:NSNotification){
ifUIScreen.main.isCaptured{
//屏幕正在被捕获,能够在这里做一些隐藏内容的操作,比如
//显现一个掩盖所有内容的视图
}else{
//屏幕没有被捕获,能够移除那个掩盖的视图
}
}
但需求留意的是,iOS不允许运用程序彻底制止截屏。因为截图功用是体系等级的,而不是运用等级的,上述代码只能做到在截图时采纳必定的响应措施,不能彻底避免。
- Android体系避免截屏
在Android中,能够经过设置Window的特点来避免用户截图或录屏。这经过禁用FLAG_SECURE来完成。
java
//在Activity中设置制止截屏
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
//在setContentView之前调用
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE);
setContentView(R.layout.activity_main);
}
这样设置后,当前的Activity将无法被截屏或录屏。
- HarmonyOS(鸿蒙体系)避免截屏
HarmonyOS是华为开发的一个分布式操作体系,目前它在运用开发中有着与Android相似的API。因此能够运用与Android相同的办法进行制止截屏。
java
//在Ability(Activity)中设置制止截屏
@Override
protectedvoidonStart(Intentintent){
super.onStart(intent);
//在setUIContent之前调用
getWindow().addFlags(WindowManager.LayoutConfig.FLAG_SECURE);
setUIContent(ResourceTable.Layout_ability_main);
}
在HarmonyOS中,Ability相当于Android中的Activity。
请留意尽管上述办法能够有效地避免绝大多数截屏和录屏行为,但技术上并不是100%无法绕过的(例如某些root设备或具有特别权限的运用可能能够绕过这些限制)。因此,在处理非常灵敏的信息时,请归纳其他安全措施一同运用,比如数据加密、用户行为剖析等。