如何防止更改摄像头权限后iOS应用程序重置?

18

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

  1. 打开使用相机权限的应用程序。
  2. 导航到应用程序中的某个屏幕(以便您稍后可以看到刷新)
  3. 进入“设置”应用程序,导航到应用程序的设置,并切换相机权限
  4. 双击主页并返回应用程序。几秒钟后,它将刷新,将您带回第一个屏幕

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

我已经注意到所有具有相机权限的应用程序都会出现此行为。我的问题是: 是否有办法在更改相机权限后防止应用程序在恢复时刷新/重新启动?例如,当您切换位置服务时似乎不会发生这种情况,并且从可用性角度看,这非常糟糕。

用户场景:如果用户深入到您的应用程序中,然后需要更改相机权限(因为他们上次意外点击了“否”),则在返回时将被迫回到该屏幕。这对于尝试销售某些东西或为您注册新帐户的应用程序特别有害。他们可能会尝试引入一个新功能,您可以使用相机拍摄个人资料照片或扫描信用卡。因为用户之前不知道此功能,所以他们可能先前拒绝了相机访问权限,但现在想启用它。在尝试重新启用后,他们回来发现必须花费5分钟以上再次进行注册/购买!之后,即使是我也可能放弃。

2个回答

18

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

防止这种情况的唯一方法是在终止应用程序时保存应用程序的先前状态。

  • 将应用程序的当前数据存储为json/plist/NSUserDefaults/archive用户模型,并在applicationWillTerminate:方法中恢复已保存的数据
  • 在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
应用程序终止时,即使在viewDidLoad中添加了通知,也没有调用applicationWillTerminate方法,您有什么想法吗?请帮帮我。 - Nikunj Jadav

3

接受的答案是正确的,然而解决方法似乎在当前版本的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
}

2
能否把保存/恢复状态的代码也放在答案里?谢谢! - Dave Kliman
实际上它被称为 applicationDidEnterBackground - Skonitsa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接