PhoneGap暂停事件,模糊当前屏幕以防止敏感数据显示在快照中

时间:2013-08-16 22:53:57

标签: ios css cordova

我正在使用phonegap和jquery mobile开发iphone应用程序。当应用程序关闭并进入后台模式时,我试图模糊屏幕,以便在应用程序恢复时,屏幕上的敏感数据将模糊不清。

我试图在暂停事件中执行此操作,但看起来IOS在暂停事件之前截取应用程序的屏幕截图,因此我的模糊代码无法在IOS恢复时显示的屏幕截图中捕获应用

有没有人对如何使其发挥作用有任何想法?

暂停事件由UIApplicationDidEnterBackgroundNotification触发,这意味着已经在后台拍摄的应用程序已经拍摄。在此之前是否有可以挂钩的事件?

当您双击主页按钮时显示屏幕截图时,在ios7中这将更为重要。在ios6中,只有在应用程序恢复并加载时才会显示一瞬间。

谢谢!

我在暂停时尝试过的代码并恢复了phonegap听众。

// listen for events
document.addEventListener("resume",      onResume, false);
document.addEventListener("pause",       onPause, false);

// show passcode if enabled, maybe even re-fresh app to start new session and clean up  memory issues?
function onResume() {
    // unblur page
    var filterVal = 'blur(0px)';
    $('.ui-page').delay(1000).css('webkitFilter', filterVal);
}

function onPause() {
    var filterVal = 'blur(10px)';
    $('.ui-page').css('webkitFilter', filterVal);   
}

2 个答案:

答案 0 :(得分:1)

我在这里遇到同样的问题。如果您的应用启用了多任务处理。您可以通过添加当前代码

来更改appdelegate中的本机代码
- (void)applicationDidEnterBackground:(UIApplication *)application {

    NSLog(@"Application Did Enter Background");
    self.viewController.webView.hidden = YES;

    NSString *splashImage;
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        splashImage = @"Default-Portrait~ipad.png";
    }
    else {
        splashImage = @"Default~iphone.png";
    }

    UIImageView *splash = [[UIImageView alloc]initWithFrame:[self.window frame]];
    [splash setImage:[UIImage imageNamed:splashImage]];
    [self.window addSubview:splash];

}

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

    NSLog(@"Application Did Become Active");
    if([[self.window subviews] count]>1) {
        [NSThread sleepForTimeInterval:0.3];
        [[[self.window subviews] lastObject] removeFromSuperview];
    }
    self.viewController.webView.hidden = NO;
}

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

    NSLog(@"Application Did Resign Active");
    self.viewController.webView.hidden = YES;

    NSString *splashImage;
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        splashImage = @"Default-Portrait~ipad.png";
    }
    else {
        splashImage = @"Default~iphone.png";
    }

    UIImageView *splash = [[UIImageView alloc]initWithFrame:[self.window frame]];
    [splash setImage:[UIImage imageNamed:splashImage]];
    [self.window addSubview:splash];

}

但是,请确保您的应用支持多任​​务处理。否则,由于在关闭多任务处理功能时未调用applicationDidEnterBackground,因此无法工作。和应该调用的函数(applicationWillTerminate),它既不被调用也不被调用。

答案 1 :(得分:0)

phonegap插件 cordova-plugin-privacyscreen 可以解决问题 - 它会在背景化之前用启动图像替换视图,然后将其清除。

https://www.npmjs.com/package/cordova-plugin-privacyscreen