如何仅在 applicationDidBecomeActive 中触发“通知中心或控制中心”时检查
Posted
技术标签:
【中文标题】如何仅在 applicationDidBecomeActive 中触发“通知中心或控制中心”时检查【英文标题】:How to check only when "Notification Center or Control Center" are triggered in applicationDidBecomeActive 【发布时间】:2017-02-16 05:25:49 【问题描述】:众所周知,当我们打开和关闭底部控制中心/顶部通知中心时,applicationDidBecomeActive 会调用。
但我想知道 仅因为这两个事件在 applicationDidBecomeActive 中,以便在用户打开和关闭通知中心或控制中心时处理一些功能。
- (void)applicationDidBecomeActive:(UIApplication *)application
if(/*Code for DidBecomeActive Called Because of Contol Center*/ --- )
if(/*Code for DidBecomeActive Called Because of Notification Center*/)
谁帮我看看
由于通知中心而调用了 DidBecomeActive 的代码
由于控制中心而调用了 DidBecomeActive 的代码
【问题讨论】:
在这里您可以找到您的information。 【参考方案1】:我不确定您能否完全实现您想要的 - 但您可以接近。当您将通知中心拉下(或控制中心向上,或进入应用切换器)时,您将获得:
applicationWillResignActive
关闭面板并返回应用会调用:
applicationDidBecomeActive
现在完全后台应用程序改为调用此序列:
applicationWillResignActive
applicationDidEnterBackground
然后重新打开应用调用:
applicationWillEnterForeground
applicationDidBecomeActive
所以你需要做的就是使用一个标志来跟踪序列:
@property (nonatomic, readwrite) BOOL wasControlCenter;
- (void)applicationWillResignActive:(UIApplication *)application
_wasControlCenter = YES;
- (void)applicationDidEnterBackground:(UIApplication *)application
_wasControlCenter = NO;
- (void)applicationWillEnterForeground:(UIApplication *)application
_wasControlCenter = NO;
- (void)applicationDidBecomeActive:(UIApplication *)application
if (_wasControlCenter)
// Do your thing
很遗憾,我认为没有办法区分控制中心、通知中心、应用切换器等。
【讨论】:
使用 ios13 进行测试 applicationWillResignActive 在进入控制面板时不会被触发,但 applicationDidBecomeActive 会在你回来时触发。 通过打开openSettingsURLString
与仅拉下控制中心/通知中心查看应用程序进入操作系统设置之间的回调差异,成功验证。调查结果:当您拥有控制中心/通知中心时,您并没有在后台运行应用程序,您仍然可以以模糊的方式看到应用程序,您只是将其退出活动状态。当控制中心放开时,应用程序再次激活。但是,对于进入设置应用程序,事件是这样的:resignActive --> EnterBackground,然后返回到应用程序:EnterForeground -->BecomeActive以上是关于如何仅在 applicationDidBecomeActive 中触发“通知中心或控制中心”时检查的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jqueryui 仅在其右侧调整左侧 div 的大小,并且它是相邻的右侧 div,仅在其左侧?