17

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

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

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

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

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

4

2 回答 2

18

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

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

  • 在 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
}

希望对你有帮助:)

于 2015-07-29T17:49:38.337 回答
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
}
于 2016-01-09T00:53:20.887 回答