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

时间:2015-07-29 16:45:56

标签: ios ios8 user-permissions ios-camera

目前,当我在“设置”中更改我的应用的相机权限,然后导航回我的应用,该应用将强制刷新,我将失去我在应用中的位置。我完全遵循这些步骤

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

    我在所有拥有相机权限的应用中都注意到了此行为。我的问题是: 在更改相机权限后,是否有某种方法可以阻止应用刷新/重新启动(恢复时)?例如,当您切换位置服务时,它似乎不会发生可用性观点这太可怕了。

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

2 个答案:

答案 0 :(得分:9)

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

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

  • 在appWillTerminate:method和
  • 将app当前数据存储到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 :(得分: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
}