iOS 扩展 - 检测“扩展状态更改”(背景/前景)

Posted

技术标签:

【中文标题】iOS 扩展 - 检测“扩展状态更改”(背景/前景)【英文标题】:iOS Extension - Detect "extension state changes" (Background/Foreground) 【发布时间】:2014-10-06 18:08:17 【问题描述】:

我为 ios8 实现了一个共享扩展。该服务使用 OAuth 进行身份验证。我用于扩展的登录信息与容器应用共享。

问题是:

当我在扩展程序中时,应用程序切换到容器应用程序并注销,然后应用程序切换回包含扩展程序的主机应用程序 - 我如何检测到扩展程序刚刚重新出现?扩展依赖于容器应用和扩展之间的共享数据库中存在的某些信息,但是,当应用注销时,这些数据会被删除。

我尝试注册各种“应用通知”,例如 UIApplicationDidBecomeActiveNotification。然而,正如预期的那样,这些并不需要扩展。

如何检测扩展程序的状态何时发生变化,以便让我的扩展程序在重新出现时更加健壮?

【问题讨论】:

【参考方案1】:

你的主视图控制器类的viewDidAppear:animated: 方法应该在你每次重新进入你的扩展时被调用。当您即将离开时,应致电viewWillDisappear:animated:

【讨论】:

不幸的是,这不起作用。在这种特殊情况下(带有扩展)不会调用这些函数。【参考方案2】:

NSExtensionContext.h

iOS 8.2 添加了许多通知用于扩展:

NSExtensionHostDidBecomeActiveNotification
NSExtensionHostDidEnterBackgroundNotification
NSExtensionHostWillEnterForegroundNotification
NSExtensionHostWillResignActiveNotification

【讨论】:

iOS 8.0 的解决方案? 我们没有调查过。我们已决定以 8.2+ 为目标并保留它。 你如何实际使用这些? [[NSNotificationCenter defaultCenter] addObserver:self 选择器:@selector(hostIsInForegroundNotification:) name:@"NSExtensionHostDidBecomeActiveNotification" object:nil];不会触发扩展中的选择器。这个答案不起作用。 我注意到的是,第一次将主机带入前台时,活动/前台不会触发。但它们确实会在您访问主机中的共享扩展后触发第二次等。

以上是关于iOS 扩展 - 检测“扩展状态更改”(背景/前景)的主要内容,如果未能解决你的问题,请参考以下文章

[综]前景检测GMM

Matlab - 运动检测的背景减法

学会注意错误

OpenCV 前景检测慢

具有透明背景和不透明前景的 iOS 模态 ViewController

国科大人工智能学院《计算机视觉》课 —运动视觉—运动检测