如何在更改相机权限后阻止iOS应用重置?

问题描述 投票:10回答:2

目前,当我在“设置”中更改我的应用程序的相机权限时,然后导航回我的应用程序,该应用程序将强制刷新,我将失去我在应用程序中的位置。我完全按照以下步骤操作:

  1. 打开使用相机权限的应用。
  2. 导航到应用程序中的某个屏幕(这样您可以在以后看到刷新)
  3. 转到“设置”应用,导航到应用的设置,然后切换相机权限
  4. 双击主页并返回应用程序。几秒钟后,它会刷新,让你回到第一个屏幕

注意:我正在使用运行iOS 8.4的iPhone 6

我在所有拥有相机权限的应用上都注意到了此行为。我的问题是:在更改相机权限后,是否有某种方法可以阻止应用刷新/重启(恢复时)?例如,当您切换位置服务时似乎没有发生这种情况,从可用性的角度来看,这很糟糕。

用户场景:如果用户深入导航到您的应用程序,然后需要更改摄像头权限(因为他们上次不小心意外点击),他们将被迫在返回时导航回该屏幕。这对于试图向您推销某些内容或为您注册新帐户的应用程序尤其有害。他们可能会尝试引入一项新功能,您可以使用相机拍摄个人资料照片或扫描信用卡。由于用户不知道此功能,他们可能先前已拒绝摄像头访问,但现在想要启用它。尝试重新启用后,他们会回到您的应用程序,发现他们必须再花5分钟以上注册/进行购买!在那之后,即使我可能会放弃。

ios ios8 user-permissions ios-camera
2个回答
9
投票

我确信没有其他方法可以阻止重启应用程序。实际上,当切换设置时,您将收到SIGKILL消息但没有崩溃日志。见以下链接 -

防止此方案的唯一方法是在终止时保存应用程序的先前状态。

  • 在appWillTerminate:方法中将您当前的数据存储到json / plist / NSUserDefaults / archive用户模型中
  • 在applicationWillEnterForeground恢复保存的数据:

例如@SignUpViewController注册UIApplicationWillTerminateNotification,它将在应用程序即将终止时触发。在那里存储用户信息。

- (void)viewDidLoad
{
 [super viewDidLoad];
 [[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(applicationWillTerminate:)
    name: UIApplicationWillTerminateNotification object:nil];
}

- (void)applicationWillTerminate:(NSNotification *)notification
{
 // store your data here
}

希望对你有帮助:)


1
投票

接受的答案是正确的,但是解决方法似乎不适用于当前版本的iOS(9.2) - 应用程序似乎在UIApplicationWillTerminateNotification被触发之前终止。但是,通过监听UIApplicationDidEnterBackgroundNotification,可以实现同样的目的。例如在Swift中,将它放在viewDidLoad()中

NSNotificationCenter.defaultCenter().addObserver(self, selector: "enteringBackground:", name: UIApplicationDidEnterBackgroundNotification, object: nil)

并有这样的功能:

func enteringBackground(sender:AnyObject){
    // Save application state here
}
© www.soinside.com 2019 - 2024. All rights reserved.