APP进入后台时自动截屏的应对方法

点击HOME键使应用进入后台时,iOS会自动对当前屏幕进行截屏处理,并保存成图片文件。

在Mac中可以看到,这些截屏文件会被保存在下述路径中:

<Home>/Library/Caches/Snapshots/(Bundle identifier)/

且文件名以"UIApplicationAutomaticSnapshotDefault-"开头。

这些自动生成的截屏文件,对启用了密码保护功能的应用而言,在安全性方面会是个比较严重的问题。

经过各种试验,找到了3中解决方法。

  • 方法一:

经过调试发现,在执行完applicationDidEnterBackground之后(也就是单击HOME键),才会发生截屏处理。
1、单击HOME键
会依次执行applicationWillResignActive
-> applicationDidEnterBackground

2、双击HOME或者四指向上滑动
只执行applicationWillResignActive

根据上述调试结果,可以在AppDelegate中进行如下处理:

- (void)applicationWillResignActive:(UIApplication
*)application
{
    // 如果启用了密码保护,则添加临时的空白画面来遮挡当前显示内容
 
  if (usePin)
    {
        if
(self.lockView)
        {
       
    [self.lockView removeFromSuperview];
     
      self.lockView = nil;
       
}

        self.lockView = [[[UIView alloc]
initWithFrame:self.window.bounds] autorelease];
       
self.lockView.backgroundColor = [UIColor grayColor];

     
  [self.window addSubview:self.lockView];
    }
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{

// 隐藏当前window,可以抑制截屏、或使生成的截屏文件为空白文件
self.window.hidden = YES;
}

- (void)applicationDidBecomeActive:(UIApplication
*)application
{
    // 显示window
    if
([self.window isHidden])
    {
       
self.window.hidden = NO;
    }

    //
此处添加你的密码输入画面
    if (usePin)
    {
   
    // TODO:设置密码输入画面
    }

    //
删除临时画面
    if (self.lockView)
    {
   
    [self.lockView removeFromSuperview];
     
  self.lockView = nil;
    }
}

  • 方法二:

调用UIApplication的ignoreSnapshotOnNextApplicationLaunch。
鉴于该方法只在iOS SDK
7.0之后才出现,无法解决iOS6中的截屏问题,果断放弃。

  • 方法三:

可以在info.plist中设置UIApplicationExitsOnSuspend属性。
缺点:进入后台即关闭应用,局限性比较大。

APP进入后台时自动截屏的应对方法,布布扣,bubuko.com

时间: 2024-10-16 10:18:41

APP进入后台时自动截屏的应对方法的相关文章

【转】Fundebug上线微信小游戏错误监控!支持自动截屏!

摘要: Fundebug竭诚为你的小游戏保驾护航. 想必大家都玩过"跳一跳"吧?刷排行榜的感觉是不是很好啊!还有"知乎答题王"呢,在智力上碾压老铁简直太棒了! 自带社交属性的小游戏很火,是微信帝国的另一座金矿! 为什么监控小游戏? 理论上来讲,BUG是无法避免的,实时监控阔以帮助开发者第一时间发现BUG,及时修复BUG,将BUG的影响降到最低. 开发者通常是比较自信的,他们坚持我写的代码当然没问题.然而,再拷问一下自己: 我的代码真的100%没有问题吗? 我做了完整

Android自动截屏小脚本

Android自动截屏小脚本(脱离手工操作,自动保存到PC上) @echo offecho * 截图文件将保存在 E:\takeshont下,以当前日期+时间命名.echo =================================================echo * 如果在停止截图后,无法删除或者上传,可到任务管理器中删除adb.exe进程echo =================================================================

ios截屏使用的方法

- (UIImage*)getimage{//截屏使用的方法CGSize imageSize = [[UIScreen mainScreen] bounds].size;if (NULL != UIGraphicsBeginImageContextWithOptions) {UIGraphicsBeginImageContextWithOptions(imageSize, NO, 0);} else {UIGraphicsBeginImageContext(imageSize);}CGConte

Android Activity切换(跳转)时出现黑屏的解决方法

在两个Activity跳转时,由于第二个Activity在启动时加载了较多数据,就会在启动之前出现一个短暂的黑屏时间,解决这个问题比较简单的处理方法是将第二个Activity的主题设置成透明的,这样在启动第二个Activity时的黑屏就变成了显示第一个Activity界面.这个分两步完成:第一步:xxx/res/values/styles.xml中加入自定义Activity的Theme,如下所示: [html]  <style name="Transparent" parent=

Android Activity切换(跳转)时出现黑屏的解决方法 分享

在两个Activity跳转时,由于第二个Activity在启动时加载了较多数据,就会在启动之前出现一个短暂的黑屏时间,解决这个问题比较简单的处理方法是将第二个Activity的主题设置成透明的,这样在启动第二个Activity时的黑屏就变成了显示第一个Activity界面.这个分两步完成: 第一步:xxx/res/values/styles.xml中加入自定义Activity的Theme,如下所示: [html]  <style name="Transparent" parent

PHP 下载文件时自动添加bom头的方法

首先弄清楚,什么是bom头?在Windows下用记事本之类的程序将文本文件保存为UTF-8格式时,记事本会在文件头前面加上几个不可见的字符(EF BB BF),就是所谓的BOM(Byte order Mark).不仅限于 记事本保存的文件,只要在文件的开口包含了EF BB BF 几个不可见的字符(十六进制应该是是xEFxBBxBF,用二进制编辑文件可见).这像是一个约定俗成的东西,当系统看到这玩意的时候,就会觉得你这个文件是UTF-8编码的. 如果你的接口是UTF-8的,你需要强制下载一个文件,

vcenter web登陆时自动记住用户名密码的方法

1.windows vcenter环境修改以下文件 C:\ProgramData\VMware\vCenterServer\runtime\VMwareSTSService\webapps\websso\WEB-INF\view\unpentry.jsp 2.VCSA环境修改以下文件 /usr/lib/vmware-sso/vmware-sts/webapps/websso/WEB-INF/views/unpentry.jsp 3.在上述文件中找到以下这行代码,并将相应的值填进去 <input

每天一点点之vue框架开发 - vue中使用vue-router切换页面时自动滚动到顶部的方法

1. 在main.js入口文件中写入 //路由跳转后,页面回到顶部 router.afterEach(() => { document.body.scrollTop = 0; document.documentElement.scrollTop = 0; } 位置如下: 2. 还可以在实例router对象的时候设置 export default new Router({ mode: 'hash', // base: '/dist/', scrollBehavior: () => ({ y: 0

贡献个Android 截屏并自动传到电脑上的shell脚本

Android设备用久了,截屏是个麻烦事.更麻烦的是通过qq传到电脑上,倒腾半天.其实用adb命令就可以截屏,然后写个pull的语句就可以拉到电脑上了.文件名为capture.sh, 内容如下: #! /bin/bash adb shell screencap -p /sdcard/test.png #adb pull /sdcard/test.png ~/Desktop/test.png dir=~/Desktop/ curr=`date "+%Y-%m-%d %H:%M:%S"`