如何仅在 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,仅在其左侧?

仅在满足条件时如何应用edgeIgnoringSafeArea?

如何仅在脚本期间设置环境变量?

如何仅在鼠标悬停时显示文本

如何仅在从 Firebase 下载数据后执行操作