首页 > 其他分享 >防止Android截屏

防止Android截屏

时间:2023-06-06 21:34:41浏览次数:52  
标签:SECURE WindowManager SurfaceView FLAG 截屏 防止 Android public

一、背景介绍

对于涉及用户个人隐私的应用,比如银行、支付、社交等应用,其界面中可能会涉及到用户的个人信息,比如手机号、身份证号码、交易记录等。如果这些信息被人截屏,就可能会造成用户个人隐私的泄露。
另外一方面,一些企业和开发者可能会开发一些自己的知识产权应用,比如游戏、新闻客户端、电商应用等,这些应用中可能会包含大量独有的内容和资料,如果被人截屏,就可能会遭受知识产权侵犯。

二、Android系统中禁止截屏的实现方式

1. 使用FLAG_SECURE属性

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //禁止当前页面截屏
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
        setContentView(R.layout.activity_main2);
    }

2. 使用SurfaceView

在Android系统中,SurfaceView是一种可以在应用中显示图像和视频的组件。而且,SurfaceView还拥有一个特性,即可以禁止截屏。具体操作是在创建SurfaceView时,使用setSecure()方法来设置:

SurfaceView.setSecure(true);

三、实现示例

以下示例为在Activity中使用FLAG_SECURE属性实现禁止截屏:

public class SampleActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
        setContentView(R.layout.activity_main);
    }
}

以下示例为在SurfaceView中使用setSecure()方法实现禁止截屏:

public class SampleSurfaceView extends SurfaceView implements SurfaceHolder.Callback {
    
    public SampleSurfaceView(Context context, AttributeSet attrs) {
        super(context, attrs);
        getHolder().addCallback(this);
        setZOrderOnTop(true);
        setSecure(true);    // 禁止截屏
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        // todo something
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        // todo something
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        // todo something
    }
}

四 注意事项

(1)禁止截屏并不等于防抄袭,用户仍然可以通过从另一个手机或者相机拍照等方式来获取屏幕上的内容;

(2)禁止截屏可能会对应用性能产生一定的影响,使用时需斟酌权衡;

(3)禁止截屏只能阻止截屏,无法阻止用户通过拍照、录屏等其他方式获取屏幕上的信息,因此需要在业务场景中进行综合考虑,综合选用多种安全措施。
(4)在某些设备上使用WindowManager.LayoutParams.FLAG_SECURE时要小心(在Samsung Galaxy ACE上进行了验证,例如GT-S5830),这将使视图混乱。看起来像是三星特有的错误。建议以下内容:

if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
}

标签:SECURE,WindowManager,SurfaceView,FLAG,截屏,防止,Android,public
From: https://www.cnblogs.com/wzqnxd/p/17461770.html

相关文章

  • android应用启动的时候添加图片,并设置跳过按钮
    要在显示图片时添加跳过按钮,可以使用AndroidSDK提供的splashscreen资源文件,并在布局文件中使用。以下是添加跳过按钮的一般步骤:1.在AndroidManifest.xml文件中的应用程序标签中添加以下行:android:splashScreen="res/drawable/splash_screen.png"这将指定使用spla......
  • SMB 签章可以用于保护 SMB/TCP 协议传输的数据安全性,防止网络中的恶意用户或攻击者篡
    SMB签章可以用于保护SMB/TCP协议传输的数据安全性,防止网络中的恶意用户或攻击者篡改原始数据。要启用SMB签章,可以执行以下批处理脚本:CopyCode@echooffsetlocalrem启用SMB签章echoEnablingSMBsigning...regadd"HKLM\SYSTEM\CurrentControlSet\Services\Lanma......
  • iTOP-3588开发板Android12源码定制开发uboot开发
    uboot开发-Uboot源码是v2017.09版本。目前在该平台上已经支持RK所有主流在售芯片。支持的功能主要有:支持RKAndroid固件启动;支持AndroidAOSP固件启动;支持LinuxDistro固件启动;支持Rockchipminiloader和SPL/TPL两种Pre-loader引导;支持LVDS、EDP、MIP......
  • Android 实现下拉界面一种方式
    需要是按的效果从屏幕顶端下拉出来一个界面跟随手势滑动效果如下先看一下实现之后的window层级$dumpsyswindowwindowsWindow#0Window{2710e08u0SystemUI_smallPanel}:mDisplayId=0rootTaskId=1mSession=Session{47392681310:1000}mClient=android.os.Bi......
  • android接入云平台的两种方法
    通过jar包接入:将jar包复制下来将安卓切换到project下app——lib下将jar包粘贴进来,选中jar包右击addaslibrary通过SDK接入:File——New——importModule将SDK导入进来添加依赖库: 记得添加网络权限:<uses-permissionandroid:name="android.permission.INTERNET"/> ......
  • 【GiraKoo】adb.exe频繁崩溃,与Android设备连接不稳定
    【解决方案】adb.exe频繁崩溃,与Android设备连接不稳定在使用AndroidStudio时,发现adb.exe连接非常不稳定。通过EveryThing工具搜索关键字adb.exe。发现了大量的AppCrash_adb文件夹,adb.exe.xxx.dmp文件等情况。初步判断,应当是adb在运行时,程序频繁崩溃。遇到此类问题,尝试了以下几......
  • jack-server导致 Android 编译 出现异常
    错误代码如下:[2%39/1330]EnsureJackserverisinstalledandstartedFAILED:/bin/bash-c"(prebuilts/sdk/tools/jack-admininstall-serverprebuilts/sdk/tools/jack-launcher.jarprebuilts/sdk/tools/jack-server-4.8.ALPHA.jar2>&1||(exit0))&am......
  • 每日记录(Android_AndroidManifest.xml配置文件)
    AndroidManifest.xml配置文件对于Android应用开发来说是非常重要的基础知识,本文旨在总结该配置文件中重点的用法,以便日后查阅。下面是一个标准的AndroidManifest.xml文件样例。<?xmlversion="1.0"encoding="utf-8"?><manifest><!--基本配置--><uses-permission/>......
  • 每日记录(每日记录(Android_AndroidManifest.xml配置文件) 二)
    <uses-library>用于指定Android应用可使用的用户库,除了系统自带的android.app、android.content、android.view和android.widget这些默认类库之外,有些应用可能还需要一些其他的Java类库作为支持,这种情况下我们就可以使用<uses-library>标签让ClassLoader加载其类库供Android应用......
  • 每日记录(每日记录(Android_AndroidManifest.xml配置文件) 三)
    <service>Service服务组件的声明标签,用于定义与描述一个具体的Android服务,主要属性有:Service服务类名android:name,服务图标android:icon,服务描述android:label以及服务开关android:enabled等。关于Service服务组件的概念和用法请参考2.1.4.2节的内容,以下是<service>标签的语法范......