3

我正在开发一个带有 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);   
}
4

2 回答 2

2

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

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

于 2015-11-24T19:18:47.347 回答
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),它也没有被调用。

于 2014-02-18T17:20:39.557 回答